0

如果节点只有两个线程,一个用于执行主代码,另一个用于所有回调,如果回调是资源/时间密集型的,则仍然会发生阻塞。

假设您有 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);

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

4

1 回答 1

0

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

对数据库的请求也是异步的 - 您所做的就是将查询放入队列中以传输到 db 套接字,然后其他一切都在幕后发生,只有当数据库响应时才会回调,因此不会阻塞应用逻辑。

于 2013-07-05T15:54:16.383 回答