js单线程及异步笔记
创始人
2024-05-14 20:14:23
0

js单线程及异步笔记

  • js运行时默认是单线程的,除非显式的使用或创建了其他线程
    • 浏览器Web Workers
    • nodejs通过node:worker_threads
  • js里没有c或java中的互斥锁等同步对象(单线程不需要)
  • js单线程(主线程)里有任务队列和微任务队列
    • 所以一般通常回调也是在主线程中执行的
    • 关于微任务 mdn

同步与异步

同步是阻塞的,上一行执行完才能执行下一行,从上到下一行一行执行的

//示意同步代码,这个是最普通、最常见的场景(普通的脚本文件中最多)
function sleepS(second){console.log(`start time point:${new Date().toLocaleTimeString()}`);let start = new Date();let startMs = start.getTime();let reachTime = false;do {let cur = new Date();let curMs = cur.getTime();if((curMs - startMs) > 1000*second){reachTime = true;}}while(!reachTime);console.log(`end time point:${new Date().toLocaleTimeString()}`);
}
console.log('this is first line!');
sleepS(2);
sleepS(3);
console.log('this is last line!');

异步是调用后,调用方不用等待结果,可以继续执行其他代码;异步结果会通过回调方式通知的


function asyncCode(){console.log(`this is first line!`);setTimeout(()=>{console.log(`this 3, is called,by task queue!`);},1);console.log(`this 2!`);
}asyncCode();

该函数输出如下:

this is first line!
this 2!
this 3, is called,by task queue!

该示例说明:

  • setTimeout是异步执行的
  • 主线程存在任务队列

异步函数的来源

  • 运行时提供
    • 浏览器环境,比如setTimout 、setInterval 、XMLHttpRequest等
    • node环境,几乎所有api都是异步的
  • 自己封装的函数(也是异步的,不阻塞、结果通过回调等方式通知)
  • 不基于运行时提供的能力,纯粹的js是没法写出原生的异步的函数的
    • 其实c++也是;语言本身并不提供异步的实现;只是借助操作系统的线程,提供了一些实现异步的方法;
    • 语言本身提供了一些标准库,对操作系统 的线程进行了封装,只是更方便使用、可移植(std::thread、std::async)
    • c++语言的std::function也只是对函数指针的一种升级

Promise

const bar = () => console.log('bar')const baz = () => console.log('baz')const foo = () => {console.log('foo')setTimeout(bar, 0) //宏任务再下一次队列开始时执行new Promise((resolve, reject) =>{//promise中的代码是主线程中同步执行的,一般是负责触发调用异步的函数,很快完成,不会阻塞console.log("after foo,befor baz");resolve('应该在 baz 之后、bar 之前')}).then(resolve => console.log(resolve))baz()
}foo()

async和await

  • 是对promise的优化
  • async修饰函数是标注该函数是异步的,或者不会阻塞的
  • 后续继续补充
    https://developer.mozilla.org/zh-CN/docs/Web/API/HTML_DOM_API/Microtask_guide
    1
    2

相关内容

热门资讯

深圳麦金荣膺广东南方黄金市场研... 6月,深圳麦金网络科技有限公司(下称深圳麦金)凭借在贵金属产业领域的卓越贡献与创新实践,荣获广东南方...
台风、暴雨、高温 中央气象台今... 中新网7月6日电 据中央气象台网站消息,7月6日早6时,中央气象台继续发布台风黄色预警、暴雨蓝色预警...
从笔尖滋味到光影美学!苏州美食... 【从笔尖滋味到光影美学!#苏州美食很精致#】7月5日,在苏州长船湾码头中国电影资料馆江南分馆,一场以...
以“雨”为令、以“迅”应“汛”... 央视网消息:近日,我国多地出现降雨天气,各地各部门积极应对,保障人民群众安全。黑龙江哈尔滨:强降雨致...
“关山别情——琵琶专场音乐会”... 7月5日下午,“关山别情——琵琶专场音乐会”在黑龙江省图书馆报告厅举行,该场音乐会是黑龙江省图书馆品...
“AI IN杭州廿四时”启动杭...   炒股就看金麒麟分析师研报,权威,专业,及时,全面,助您挖掘潜力主题机会! 来源:人民网6月28...
温网第100胜!德约科维奇晋级... 来源:央视体育 北京时间7月6日凌晨,2025温网男单第三轮,七届赛会冠军德约科维奇直落三盘以6-3...
土耳其罕见“七月飞雪” 当地人... 格隆汇7月6日|据央视,当地时间4日,土耳其东北部出现罕见的“七月飞雪”现象,一片高海拔山区降下皑皑...
台风丹娜丝带着风雨来了 #丹娜丝已加强为台风级#【#台风丹娜丝带着风雨来了#】今晨,今年第4号台风“丹娜丝”由强热带风暴级加...
我国工业用钢出货量显著提升 钢... 来源:央视新闻客户端中国钢铁工业协会最新数据显示,今年前5个月,重点统计钢铁企业累计生产粗钢3.55...