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

时间:2013-11-26 17:38:50

标签: multithreading node.js callback

我经常听到Node只在一个线程中运行。但是,我不明白的是节点如何只用一个线程进行非阻塞。假设有100个并发请求进入节点Web服务器,服务器生成100个回调来处理请求。如果100个回调中的每一个都需要1秒才能完成,并且如果所有回调都在1个线程中,那么它们必须连续完成,是否意味着它会阻塞100秒?

1 个答案:

答案 0 :(得分:3)

来自博客Understanding the node.js event loop

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

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

  • threads:启动一个新线程来处理每个请求。优点:比使用fork更容易,更耐用于内核,因为线程通常具有更少的开销缺点:您的机器可能没有线程,并且线程编程可能非常快速地变得非常复杂,担心控制对共享资源的访问。

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

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

while(new Date().getTime() < now + 1000) {
   // do nothing
}

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

Read more