您的位置:首页 > 运维架构

对于Event Loop的一些理解

2016-10-08 19:17 281 查看
   js语言的一大特点就是单线程,即统一时间只能做一件事情。

任务可分为两种,一种是同步任务,另一种是异步任务

(1)同步任务是指在主线程上排列的任务,只有执行完毕才能够执行下一个任务

(2)异步任务不进入主线程,而是进入任务队列,只有“任务队列”通知主线程某个异步任务可以执行了,该任务会进入主线程执行。

所以同步任务也被视为没有异步任务的异步执行。

javascript运行机制(只要主线程空了,就会读取“任务队列”,依次执行事件所对应的回调函数):

(1)所有同步任务都在主线程上执行,形成一个“执行栈”

(2)主线程外,还存在一个“任务队列”,只要异步任务有了运行结果,就在“任务队列”中放置一个事件。

(3)一旦“执行栈”中所有同步任务执行完毕,系统就会读取“任务队列”看看还有哪些事件,那些对应的异步任务结束等待状态,进入执行栈开始执行(所以执行栈中的代码即同步任务总是在读取“任务队列”即异步任务之前执行)。

(4)主线程不断重复上面3步。

“任务队列”是一个事件的队列(IO设备完成一项任务,就在任务队列中添加一个事件,表示相关的异步任务可以进入“执行栈”了,主线程读取“任务队列”就是读取里面有哪些事件;用户产生的事件,比如点击页面,滚动页面等操作,只要指定过回调函数,这些事件发生时就会进入“任务队列”,等待主线程读取。)

“任务队列”是先进先出的,排在前面的事件优先被主线程读取,主线程读取过程是自动的,循环不断的,所以这个过程也称为事件循环。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  JavaScript Event Loop