Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

nodeJS eventLoop #11

Open
lou1swu opened this issue Jan 16, 2018 · 1 comment
Open

nodeJS eventLoop #11

lou1swu opened this issue Jan 16, 2018 · 1 comment

Comments

@lou1swu
Copy link
Owner

lou1swu commented Jan 16, 2018

No description provided.

@lou1swu
Copy link
Owner Author

lou1swu commented Jan 16, 2018

nodeJS eventLoop 与 浏览器的事件循环是很不一样的,我们首先要清楚v8引擎并不提供事件循环机制,那么nodeJS eventLoop是如何运转起来的呢,这就是本文将要介绍的内容。

本文地址:https://github.com/Lighting-Jack/Jack-blog/issues/11

参考
1. http://blog.csdn.net/yezhenxu1992/article/details/51731237 - 深入剖析nodeJS的异步io
2. https://zhuanlan.zhihu.com/p/29650110 - node十问
3. http://www.ruanyifeng.com/blog/2014/10/event-loop.html - 阮一峰谈事件循环

nodeJS eventLoop

nodeJS架构

image

Nodejs结构大体分为三个部分:

  1. Node.js标准库:这部分由javascript编写。也就是平时我们经常require的各个模块,如:http,fs、express,request…… 这部分在源码的lib目录下可以看到;

  2. Node bingdings: nodejs程序的main函数入口,还有提供给lib模块的C++类接口,这一层是javascript与底层C/C++沟通的桥梁,由C++编写,这部分在源码的src目录下可以看到;

  3. 最底层,支持Nodejs运行的关键: V8 引擎:用来解析、执行javascript代码的运行环境。 libuv: 提供最底层的IO操作接口,包括文件异步IO的线程池管理和网络的IO操作,是整个异步IO实现的核心! 这部分由C/C++编写,在源码的deps目录下可以看到。

执行栈、任务队列、事件循环

image

执行栈是存在于v8引擎中的,事件循环是由libuv库提供的,它不是v8的一部分。

nodeJS运行机制:(作者:@BusyRich
image

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

当然这张运行机制图是不完整的,因为任务队列可能不只有一条,正如我上一篇文章所描述的,浏览器中的执行任务会分为microTask和macroTask,nodeJS中也是如此。

上一篇文章:JS eventLoop

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant