Nodejs中的单个线程是什么意思

Qia*_*hen 6 multithreading callback node.js

我经常听到Node只在一个线程中运行.但是,我不明白的是节点如何只用一个线程进行非阻塞.假设有100个并发请求进入节点Web服务器,服务器生成100个回调来处理请求.如果每个100个回调需要1秒即可完成,而如果所有的人都在1个线程,他们在一系列的工作要做,它意味着它将100秒阻止?

Dam*_*ran 5

来自博客了解 node.js 事件循环

当前编程技术最大的浪费来自等待 I/O 完成。有几种方法可以处理性能影响(来自 Sam Rushing):

  • 同步:您一次处理一个请求,依次处理。优点:简单 缺点:任何一个请求都可以阻止所有其他请求
  • fork 一个新进程:你启动一个新进程来处理每个请求。优点:简单 缺点:不能很好地扩展,数百个连接意味着数百个进程。fork() 是 Unix 程序员的锤子。因为它是可用的,所以每个问题看起来都像钉子。这通常是矫枉过正

  • 线程:启动一个新线程来处理每个请求。优点:比使用 fork 更容易,对内核更友好,因为线程的开销通常要少得多。

Node.js 为您的代码保留一个线程......

它确实是一个单线程运行:你不能并行执行任何代码;例如,执行“睡眠”将阻止服务器一秒钟:

while(new Date().getTime() < now + 1000) {
   // do nothing
}
Run Code Online (Sandbox Code Playgroud)

因此,当该代码正在运行时,node.js 不会响应来自客户端的任何其他请求,因为它只有一个线程来执行您的代码。或者,如果您有一些 CPU 密集型代码,例如,用于调整图像大小,那仍然会阻止所有其他请求。

阅读更多

  • 这个概念有一个很大的优势。您的代码不能被中断。这意味着您不必担心库中的并发性。 (2认同)