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

相关内容

热门资讯

【社论】把智慧和力量凝聚起来—... 转自:光明网  【社论】  春光融融、万汇复苏。在这生机勃发的仲春时节,全国政协十四届三次会议圆满完...
有没有安静,禁欲系的男生啊。 有没有安静,禁欲系的男生啊。这个解法是有。。首先你是男的还是女的...除非男生是假的
我想听听中国古代(比如春秋战国... 我想听听中国古代(比如春秋战国时候)的军鼓乐曲。楼主,你找到了一定要告诉我一下啊抵制日货,无论是什么...
反转剧寻找丢失的时间中那个李正... 反转剧寻找丢失的时间中那个李正明是谁哪位好心人能告诉我啊,谢谢.??是李晟敏吧.?如果是的话``那就...
脑电波是什么? 脑电波是什么?脑电波的频率在什么范围?脑电波(Electroencephalogram,EEG)是大...
阿里巴巴的原创始人一共有几位? 阿里巴巴的原创始人一共有几位?总共有18位,他们都为阿里集团做出了很多的贡献,虽然现在有一小部分已经...
不甜的糖是指什么? 不甜的糖是指什么?多糖:淀粉\糖原\纤维素味觉出现了问题糖类物质是碳水化合物的简称 就比如说淀粉就...
三十四回从哪里可以看出孙悟空对... 三十四回从哪里可以看出孙悟空对师傅忠心耿耿?答:判断悟空对师傅是不是忠心耿耿,主要看悟空的主观能动性...
有什么游戏 (刀剑神域 GGO... 有什么游戏 (刀剑神域 GGO)差不多的啊枪战的 可加属性点的王国之心,最终幻想,鬼泣。最终幻想、...
中国古代神话读书笔记四年级上册 中国古代神话读书笔记四年级上册中国古代神话读书笔记四年级上册如下:文章:《丢卡利翁和皮拉》优美词汇:...
《诗》、《书》、《礼》、《乐》... 《诗》、《书》、《礼》、《乐》、《易》、《春秋》分别是讲什么的?这些书分别是教授人们什么东西、  五...
汉朝规定女子多少岁必须结婚 汉朝规定女子多少岁必须结婚汉代早婚现象的兴起,王室与民间皆然。查考《汉书》、《后汉书》,男子从十五岁...
1一排排搭石,任人走,任人踏,... 1一排排搭石,任人走,任人踏,它们联结着是借物喻人还是托物言弘?一排排的搭石,任人走,任人踏,他们联...
道家到底高明在哪儿? 道家到底高明在哪儿?道家高明之处,在于把万事万物都融入了自然界之中,虽然虚无缥缈,但是有迹可寻。道家...
传说人有七魂六魄,失去了三魂二... 传说人有七魂六魄,失去了三魂二魄,会是什么样?做事丢三拉四应是3魂7魄,失去了三分之一的魂和魄会进入...
“青海产”光伏产品获国际市场青... 黄河公司西宁分公司生产车间工作人员查看电池组件。图片由黄河公司提供本报讯(西海全媒体记者 周建萍 通...
收盘:经济衰退风险重创美股 纳... 查看最新行情   北京时间11日凌晨,美股周一重挫,科技股领...
经营主体要谨防 “年报”类型电... 本报讯(西海全媒体记者 祁宗珠)3月10日,记者从西宁市公安局反电信网络诈骗中心了解到,经营主体在向...
青海能做阿尔茨海默症手术了 本报讯(西海全媒体记者 徐变银 通讯员 高晓伟)3月10日,记者从青海大学附属医院获悉,日前,该医院...
解决知识产权资源不均问题 原标题:解决知识产权资源不均问题【代表委员建言】张广勇 全国人大代表,山西省市场监管局(知识产权局)...