nodejs主线程和事件循环,有什么区别?

问题描述 投票:0回答:1

当一个http请求到达Nodejs应用程序时,如果我的理解是正确的话,该请求首先被Nodejs主线程(即js主线程)接收,然后传递到事件循环。

事件循环允许 Nodejs 执行非阻塞 I/O 操作,JavaScript 是单线程的——尽可能将操作卸载到系统内核。

上面的说法来自Nodejs官方文档,所以我的问题是主线程住在哪里?

事件循环外部或事件循环内部

两者不同吗?有人可以用图形表示方式很好地描述 Nodejs 的内部工作原理吗?

javascript node.js event-loop event-driven-design
1个回答
1
投票

主线程是执行线程。正如所要求的,它位于事件循环之外,并将检查与事件循环相关的任何事件。

如果添加到事件循环中的 Even 是同步的,并且只需要一些 CPU 操作,主线程将直接控制并执行需要的操作。

如果将异步事件添加到委托给可用工作线程的事件循环中。工作线程将执行异步操作(db/API/fs 调用)。一旦事件的异步部分完成,事件将再次添加到事件循环中以执行剩余的同步部分。

工作线程是在

libUV
上构建的,并将根据主线程的要求生成。这个原因使得 Node.js 在处理异步调用时更加高效,并且不太适合 CPU 大量操作。

更详细的解释请参见:
NodeJs 和 JS 中将哪些函数放入 EventLoop 中

© www.soinside.com 2019 - 2024. All rights reserved.