如果节点只有两个线程,一个用于执行主代码,另一个用于所有回调,如果回调是资源/时间密集型的,则仍然会发生阻塞。
假设您有 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 在这种情况下并不能真正帮助我们。