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人徒步成都大邑龙窝子迷路遇险 当事人提醒:户外徒步不是“有腿就行”吴女士一行人迷路的区域。  4月,成都西郊的大邑龙窝子景色宜人,...
《关于实施自由贸易试验区提升战... 中共中央 国务院印发  新华社北京4月21日电 近日,中共中央、国务院印发《关于实施自由贸易试验区提...
实施自由贸易试验区提升战略 转自:成都日报锦观实施自由贸易试验区提升战略 《意见》提出,要打造高能级科技创新生态,...
中国体育彩票4月21日开奖结果 体彩  超级大乐透第25043期全国销售362168053元。开奖号码:03、16、20、21、27...
北京大豪科技股份有限公司 20...   证券代码:603025                                     ...
纵深发力 推动集中整治工作常态... 转自:成都日报锦观纵深发力 推动集中整治工作常态长效 □本报评论员 集中整治群众身边不正...
上海索辰信息科技股份有限公司 ...   公司代码:688507                                     ...
箭牌家居2025年第一季度财报... 2025年第一季度,箭牌家居集团股份有限公司(以下简称“箭牌家居”)的财务状况呈现出一系列变化,部分...
千斤纸浆复原“都江堰” 转自:成都日报锦观成都古建筑专家千斤纸浆复原“都江堰” 用超过千斤的纸浆,复原的都江堰水利工程...
山证资管品质生活混合A:山证资... 山证资管品质生活混合季报解读:份额赎回近1136万份,净值增长率落后业绩比较基准3.25%2025年...
重庆登康口腔护理用品股份有限公...   证券代码:001328证券简称:登康口腔公告编号:2025-012  本公司及董事会全体成员保证...
民法典与生态环境法典协同互动双... 转自:法治日报□ 吕忠梅  民法典是新中国成立以来第一部以法典命名的法律。作为世界上首部规定“绿色原...
玄学开坛受徒,都市龙道馆今天开... 玄学开坛受徒,都市龙道馆今天开馆在网上收徒弟吗?haha 我学点吧 本人基础是炼金术
市十八届人大常委会第十六次会议... 转自:成都日报锦观市十八届人大常委会第十六次会议将于4月29日举行 本报讯 (成都日报锦观新闻...
远去的渡船 转自:成都日报锦观远去的渡船 □周萍 岷江水经都江堰外江分流后成为金马河,继续一泻千里...
西部超导材料科技股份有限公司 ...   证券代码:688122            证券简称:西部超导          公告编号:2...
当大熊猫遇上武侠 “反差萌”拉... 转自:成都日报锦观对话“大熊猫文化创意大赛”参赛者当大熊猫遇上武侠 “反差萌”拉满 本报讯 (...
黄山谷捷2025年一季度财报解... 2025年第一季度,黄山谷捷股份有限公司的财务状况呈现出复杂态势,部分关键指标变动显著,值得投资者密...
成都舰来了! 转自:成都日报锦观成都舰来了! 成都舰,舷号120,是我国自主设计建造的052D型导弹...
正研究制定航运、化工等七个行业... 转自:成都日报锦观中国人民银行:正研究制定航运、化工等七个行业转型金融标准 新华社北京4月2...