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

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

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

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/