如何在node.js中实现事件循环?

时间:2013-07-05 15:51:09

标签: node.js event-loop

如果node只有两个线程,一个用于执行主代码,另一个用于所有回调,那么如果回调是资源/时间密集的话,仍然可能发生阻塞。

假设您有100,000个并发用户,并且每个客户端对节点应用程序的请求都运行一个复杂且耗时的数据库查询(假设没有进行缓存),以后的用户在等待查询返回时会遇到阻塞吗?

function onRequest(request, response) {
  //hypothetical database call
  database.query("SELECT * FROM hugetable", function(data) {
    response.writeHead(200, {"Content-Type": "text/plain"});
    response.write("database result: " + data);
    response.end();
  });      
}

http.createServer(onRequest).listen(8888);

如果每个回调都可以在自己的线程上运行,那么这是一个非问题。但是如果所有的回调都在一个单独的专用线程上运行,那么节点在这种情况下并没有真正帮助我们。

1 个答案:

答案 0 :(得分:0)

请阅读这篇好文章:http://blog.mixu.net/2011/02/01/understanding-the-node-js-event-loop/ 没有多个线程,只有一个执行node.js逻辑。 (在幕后不应考虑应用程序逻辑的I / O)

对数据库的请求也是异步的 - 所有你做的,是将查询放入队列以传输到数据库套接字,然后其他一切都在幕后发生,只有当数据库的响应到来时它才会回调,所以有没有阻止应用程序逻辑。