事件循环,同步与异步

对于单线程脚本语言,js ts lua

执行栈

所有同步任务都是在主线程上执行的,这些同步任务在主线程上的执行,这就是执行栈。

回调函数

回调函数,就是那些会被主线程挂起来的任务。异步任务必须指定回调函数,当主线程开始执行异步任务,就是执行对应的回调函数。

任务队列

"任务队列"是一个事件的队列(也可以理解成消息的队列),队列中对应的任务有了结果(比如读取文件(io操作),请求远程数据等等),就在"任务队列"中添加一个事件,表示相关的异步任务可以进入"执行栈"了。主线程读取"任务队列",就是读取里面有那些事件。

"任务队列"中的事件,除了IO设备的事件以外,还包括一些用户产生的事件(比如鼠标点击、页面滚动等等)。只要指定过回调函数,这些事件发生时就会进入"任务队列",等待主线程读取。

Event Loop

主线程先执行同步任务,也就是执行栈中的 任务,当执行完所有的执行栈中的任务后 ,从"任务队列"中读取事件,然后执行对应可执行状态的异步任务(回调)。这个过程是不断循环的,所以整个的这种运行机制又称为Event Loop(事件循环)

总结

异步执行的运行机制步骤如下:

1,所有同步任务都在主线程上执行,形成一个执行栈(execution context stack),排队执行。2,主线程之外,还存在一个"任务队列"(task queue)。只要异步任务有了运行结果,就在"任务队列"之中放置一个事件。3,一旦"执行栈"中的所有同步任务执行完毕,系统就会读取"任务队列",看看里面有哪些事件。那些对应的异步任务,于是结束等待状态,进入执行栈,开始执行。4,主线程不断重复上面的第三步。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值