关于Event_Loop引发的思考

此文章图片以及部分描述参考阮老师的文章 JavaScript 运行机制详解:再谈Event Loop

总所众知JS是一个单线程的浏览器脚本语言。程序的运行本身就是任务的运行,说道任务肯定会想到任务队列,正是这个队列保证了JS代码有条不絮的运行。主程序运行任务队列,从栈中找到需要运行的方法的地址并执行。那么什么是本文要说的Event Loop呢?

浏览器环境下的Event Loop

image

如上图所示

1
2
3
4
5
6
(1)浏览器引擎解析JavaScript脚本。
(2)解析后运行代码,产生栈堆,调用外部API。(上箭头)
(3)执行API,若为异步将在执行完异步之后将回调插入任务队列。(下箭头)
(4)当栈中的代码执行完毕,主线程就会去读取任务队列执行并产生新的栈堆。

通过(2)(3)(4)这种异步函数的不断插入新的任务进入任务队列,便形成了所说的事件循环(Event Loop)

Node.js环境下的Event Loop

image

总体与浏览器端差不多

1
2
3
4
(1)V8引擎解析JavaScript脚本。
(2)解析后的代码,调用Node API。
(3)libuv库负责Node API的执行。它将不同的任务分配给不同的线程,形成一个Event Loop(事件循环),以异步的方式将任务的执行结果返回给V8引擎。
(4)V8引擎再将结果返回给用户。

总结

有些时候看看总觉得很好理解,而真正要让别人理解你所说的就需要对该知识点异常的清楚,如果自己都模棱两可,那就很糟糕了ヘ(;´Д`ヘ)(阿西)。是时候整理一下自己零散的笔记啦。ヽ(`Д´)ノ︵ ┻━┻ ┻━┻

Author: PaulHan
Link: https://www.paulhan.com/blog/2017/06/08/关于Event-Loop引发的思考/
Copyright Notice: All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.