如果nodejs有一个线程,它是否会阻塞每个请求/响应?

时间:2014-03-03 22:02:39

标签: node.js

我知道nodejs是异步的,因此在一个封面下有一个与操作系统通信的线程。操作系统管理何时唤醒并向该线程发送有关响应等的信号。

问题是我不明白,如果只有1个线程,如何处理并发?

e.g。在nodejs中,服务器有一个保存大型xml文件的端点

如果你同时收到100个请求,它会不会阻塞,因为这些调用相当繁重,可能需要很长时间才能解析并将xml文件保存到db?

1 个答案:

答案 0 :(得分:3)

"你的"没有并发性。 Node.js中的代码文件I / O有一些线程操作,但其他所有操作都在一个线程上运行。这意味着如果您的请求处理程序需要很长时间才能完成,那么吞吐量将会相应地受到影响。

一般来说,"解决方案"这就是编写代码,使其不会立即进行大量处理。 Node中的标准库使文件i / o更容易,因为它们为您管理线程池以使它们异步。对于解析大量XML文件之类的东西,您必须找到一个公开事件驱动接口的库,并希望/检查它是否实际上以偶尔控制事件循环的方式实现解析。幸运的是,那就是npm,所以你可能会发现六个模块的质量水平各不相同。

在数据库I / O端,您通常会通过套接字I / O与远程数据库进行通信,因此您可以免费进行异步操作"。