📜  Node实际创建了多少个线程?

📅  最后修改于: 2022-05-13 01:56:57.258000             🧑  作者: Mango

Node实际创建了多少个线程?

Node.js是一个跨平台的JavaScript运行时环境,有助于执行和实现服务器端程序。 Node 支持代码的异步处理,这导致我们得出它是一个单线程平台的结果。下面我们详细讨论一下Node是单线程是什么意思,为什么要遵循这种方式。

下载并安装 Node.js:下载 Node.js

Node 的早期开发:当 Node 最初被开发时,它遵循每个请求一个线程的范式。这意味着每当用户向服务器发出请求或从数据库发出请求时……都会创建一个单独的线程来完成该请求。这种方法的问题在于,当请求将时间花在 I/O 操作上时,会导致与这些线程相关的资源浪费。这也导致了更长的执行时间,因为这是同步处理。

使用单线程和事件循环的概念:为了克服这个问题,Node 采用了具有事件循环和异步 I/O 操作的单线程系统。使用单线程允许 Node 一次执行一个进程,而比平时花费更长时间的进程由 Node API 和事件循环处理。事件循环使用回调从 Node API 处理的函数返回输出,任务继续正常执行,直到处理完整个代码。

Node的单线程工作

这种方法被认为是高效的,但这种方法也有一个缺点。当我们有很多需要同步处理的 CPU 密集型任务时,这种方法将不起作用,因为它会花费很长时间并阻塞代码。由于 JavaScript 和 Node 不是为 CPU 任务而设计的,这是一个例外情况,将通过使用工作线程以不同的方式处理。



示例:让我们考虑一个示例来了解事件循环的工作原理。

Javascript
// Simple JavaScript Code to show Event
// loop demonstration for Node
console.log("Geeks");
setTimeout(function cb(){
    console.log("Geeks");
}, 3000);
console.log("For");


当我们执行给定的代码时,输出将如下所示。

输出:

Geeks
For
Geeks

此输出的原因是执行由 Node API 处理的setTimeout()函数。因此,超时将继续单独执行,调用堆栈将继续异步执行其他语句。要了解有关 Node 如何防止阻塞代码的更多信息,请查看这篇文章

总而言之,Node 和 JavaScript 被开发为单线程,这有助于它们节省时间并节省内存。

参考资料: https : //www.geeksforgeeks.org/why-node-js-is-a-single-threaded-language/