Nodejs回调机制 - 哪个线程处理回调?

Som*_*guy 9 asynchronous scalability callback single-threaded node.js

我是nodeJS的新手,并且想知道Node的单实例模型.在一个简单的nodeJs应用程序中,当使用回调异步处理某些阻塞操作时,运行nodeJs的主线程是否也处理回调?如果请求是从数据库中获取一些数据,并且有100个并发用户,并且每个db操作需要几秒钟,当最终触发回调时(对于每个连接),主线程是否接受这些请求用于执行回调?如果是这样,nodeJs如何扩展以及它如何快速响应?

dei*_*tch 9

nodejs的每个实例都在一个线程中运行.期.当您对网络请求进行异步调用时,它不会等待它,而不是在您的代码或其他任何地方.它有一个贯穿的事件循环.当响应准备就绪时,它会调用您的回调.

这可能是非常高效的,因为它不需要大量的线程和所有内存开销,但这意味着你需要注意不要做同步阻塞的东西.

http://blog.mixu.net/2011/02/01/understanding-the-node-js-event-loop/以及Ryan Dahl 的原始jsconf演示中,对事件循环有一个相当不错的解释http:/ /www.youtube.com/watch?v=ztspvPYybIY值得一看.有没有见过工程师获得技术演示的起立鼓掌?

  • 是的.如果有100个"并发用户"(即用户发出nodejs实例的网络请求),那么仍然只有一个节点实例.发出请求时,单个线程处理它.当它进行异步调用以读取文件或访问网络服务或其他任何内容时,它仍然是同一个线程.当访问完成并且调用回调时,它仍然是相同的线程.您可以*运行多个模式实例,如果您可以使用某种负载均衡器,并且计划节点集群但仍处于试验阶段. (2认同)
  • @deitch唯一的线程如何在同时执行100件事时不阻塞?假设有100件事,每件事需要1秒钟才能完成,如果所有这些都在1个线程中,那么它们必须串行完成,这是否意味着它将阻塞100秒? (2认同)