我对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
的工作方式吗?
答案 0 :(得分:1)
Node.js基于事件循环编程模型。事件循环在单个线程中运行并重复等待事件,然后运行订阅这些事件的任何事件处理程序。事件可以是例如
计时器等待完成 下一个数据块已准备好写入此文件 我们正在寻找新的HTTP请求 所有这些都在单线程中运行,并且没有JavaScript代码并行执行。只要这些事件处理程序很小并且等待更多事件本身,一切都很顺利。这允许单个Node.js进程同时处理多个请求。
(事件起源的地方有点神奇。有些涉及并行运行的低级工作线程。)
在这个SQL案例中,在进行数据库查询和在回调中获取结果之间发生了很多事情(事件)。在此期间,事件循环不断地将生命投入到应用程序中,并且一次推进其他请求一个小事件。因此,同时提供多个请求。
请查看这篇文章Article