我知道nodejs是异步的,因此在一个封面下有一个与操作系统通信的线程。操作系统管理何时唤醒并向该线程发送有关响应等的信号。
问题是我不明白,如果只有1个线程,如何处理并发?
e.g。在nodejs中,服务器有一个保存大型xml文件的端点
如果你同时收到100个请求,它会不会阻塞,因为这些调用相当繁重,可能需要很长时间才能解析并将xml文件保存到db?
答案 0 :(得分:3)
"你的"没有并发性。 Node.js中的代码文件I / O有一些线程操作,但其他所有操作都在一个线程上运行。这意味着如果您的请求处理程序需要很长时间才能完成,那么吞吐量将会相应地受到影响。
一般来说,"解决方案"这就是编写代码,使其不会立即进行大量处理。 Node中的标准库使文件i / o更容易,因为它们为您管理线程池以使它们异步。对于解析大量XML文件之类的东西,您必须找到一个公开事件驱动接口的库,并希望/检查它是否实际上以偶尔控制事件循环的方式实现解析。幸运的是,那就是npm,所以你可能会发现六个模块的质量水平各不相同。
在数据库I / O端,您通常会通过套接字I / O与远程数据库进行通信,因此您可以免费进行异步操作"。