nodejs单线程模型是否意味着更长的处理队列?

时间:2016-05-03 17:01:45

标签: php node.js multithreading asynchronous concurrency

我对nodejs知之甚少。我所知道的是,它适用于单个线程模型,该模型切换到I/O任务的多个线程。例如,

Request A ----> nodejs (Single Thread)

// Finds out that it the requires requires I/O operation

nodejs ----> underlying OS (Starts An Independent Thread)

// nodejs is free to serve more requests

这是否意味着1000 concurrent requests,会在处理完所有999个请求后处理一个请求?如果是的话,它似乎是一个效率低下的系统!我希望apache运行php更适合(在上述情况下)。使用PHP的Apache可以启动1000并发线程,因此没有处理队列和零等待时间。

我可能在这里错过了一个重要的概念,但它真的是nodejs的工作方式吗?

1 个答案:

答案 0 :(得分:1)

Node.js基于事件循环编程模型。事件循环在单个线程中运行并重复等待事件,然后运行订阅这些事件的任何事件处理程序。事件可以是例如

计时器等待完成 下一个数据块已准备好写入此文件 我们正在寻找新的HTTP请求 所有这些都在单线程中运行,并且没有JavaScript代码并行执行。只要这些事件处理程序很小并且等待更多事件本身,一切都很顺利。这允许单个Node.js进程同时处理多个请求。

(事件起源的地方有点神奇。有些涉及并行运行的低级工作线程。)

在这个SQL案例中,在进行数据库查询和在回调中获取结果之间发生了很多事情(事件)。在此期间,事件循环不断地将生命投入到应用程序中,并且一次推进其他请求一个小事件。因此,同时提供多个请求。

请查看这篇文章Article