js单线程及异步笔记

news/2023/6/6 5:14:59

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是没法写出原生的异步的函数的

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.exyb.cn/news/show-4569325.html

如若内容造成侵权/违法违规/事实不符,请联系郑州代理记账网进行投诉反馈,一经查实,立即删除!

相关文章

excel减法函数_关于excel求和, 你不知道的那些便捷技巧

数学中最基本的计算是什么,相信大家都知道是加减乘除,excel里面最基本的计算亦如是,但是excel中基本计算的方法可不唯一,我相信大家知道的也都不尽相同。今天小鹰就给大家说下,excel中那些你知道亦或是不知道的基本计算…

EXCEL加减法

初始值两列如下: 加减法运算: 任选一列输入 A1F1 ,点击回车,再点击“I栏”右下边下拉后面的数据也进行求和计算

excel减法函数_Excel中的时间与日期计算的那些事,懂了这个原理你会感觉很简单...

#excel##excel教程##办公软件##我要上头条#这是一个可以获取知识的头条号——云端网校教程。大家好,今天给大家介绍的是一个非常重要的理论型知识,关于时间与日期。如果是办公财务人员或者计算考勤文员请认真阅读。首先我们先来说下时间与日期在Excel表格…

计算机减法函数word,谁说Excel才能运算?Word计算功能同样强大,公式函数都不在话下-excel减法函数...

通常对于数据运算,大家第一时间都会想到Excel。其实很多小伙伴不知道Word计算功能同样强大,加减乘除不在话下,而且还能使用函数哦。今天就跟大家分享在Word表格中是如何使用公式运算的。四则运算有时在编辑Word文档时,需要对一些数…

excel减法函数_懂Excel的父母屌炸天:用excel教孩子加减法,效果堪比专业老师!...

注意啦!注意啦!在文章《200篇Excel精华原创教程汇集!(文末免费领1899元课程福利!)》下留言,将有机会获赠价值500元的微课视频券,购课可抵消。赶紧戳上面蓝色文字链接,了解具体活动吧&#xff01…

excel减法函数_excel日期函数:如何计算项目的开始和完成日期

编按:哈喽,大家好!在上一篇文章中,我们说到了EDATE、DATEDIF、EOMONTH、WEEKDAY等日期函数,相信大家对于excel中的日期计算,已经有了一个大致的了解,今天我们继续上篇内容,为大家带来…

excel减法函数_七周成为数据分析师-excel

一、文本清洗函数1、find函数(find(要查找的目标,目标所在的文本))2、left函数从文档的左边开始截取(left(截取的文档所在的位置,截取的数量))3、right函数从文档的右边开始截取(right(截取的文档所在的位置…

excel减法函数_Excel公式练习35: 拆分连字符分隔的数字并放置在同一列中

学习Excel技术,关注微信公众号:excelperfect导语:这个案例仍来自于excelxor.com,没有办法,太有才了,不得不佩服这些人,竟然能把Excel公式与函数玩成这个样子!认真研究这些案例&#…