我知道Node.js使用单线程和事件循环来处理请求,一次只处理一个(非阻塞).但是,如何工作,让我们说10,000个并发请求.事件循环将处理所有请求?这不会花太长时间吗?
我无法理解它是如何比多线程Web服务器更快的.据我所知,多线程Web服务器的资源(内存,CPU)会更昂贵,但它不会更快吗?我可能错了; 请解释这个单线程如何在大量请求中更快,以及在处理大量请求(例如10,000)时它通常会做什么(在高级别).
而且,那个单线程是否能够很好地扩展?请记住,我刚刚开始学习Node.js.
仍然试图了解node.js ......
如果我为每个i/o操作应用asp.net异步模式,并配置maxWorkerThreads = 1,它(概念上)是否类似于node.js?
i/o操作(在任一框架中)是在自己的线程中发生还是有一些OS功能来获取通知/轻量级线程?
这个 SO线程说node.js仍然在内部使用线程,所以它与asp.net没有太大区别.有些答案是肯定的,但它是一个更好的编程模型等问题.问题涉及哪些线程,轻量级i/o就像我在#2中提到的那样?
我在OSX中打开了我的活动监视器,看看Node是如何相处的,令我惊讶的是它使用了8个线程.怎么可以!!?

当我正在探索NodeJS应用程序和Java应用程序如何处理请求时,我遇到了Servlet对请求的异步处理.
从我在不同的地方阅读:
请求将由来自Servlet容器的HTTP线程接收和处理,并且在阻塞操作(如I/O)的情况下,请求可以移交给另一个Threadpool,并且接收请求的HTTP线程可以返回接收并处理下一个请求.
现在,来自Threadpool的工作人员将占用耗时的阻塞操作.
如果我理解的是正确的,我有以下问题:
即使是处理阻塞操作的线程也会等待该操作完成,从而阻塞资源(并且处理的线程数等于内核数),如果我是对的话.
通过使用异步处理,这里获得了什么?
如果没有,请赐教.
我有一个更新方法,它大约每 16-40 毫秒被调用一次,在里面我有这个代码:
this.fs.writeFile("./data.json", JSON.stringify({
totalPlayersOnline: this.totalPlayersOnline,
previousDay: this.previousDay,
gamesToday: this.gamesToday
}), function (err) {
if (err) {
return console.log(err);
}
});
Run Code Online (Sandbox Code Playgroud)
如果服务器抛出错误,“data.json”文件有时会变为空。我该如何防止?