我刚开始学习 node.js,现在有一个问题:
在 HTTP 应用中,由于请求-响应模型的限制,只有当所有后端任务都完成并返回给客户端时,单个应用程序线程才会被阻塞,因此性能提升似乎仅限于微调后端操作(如并行化 IO 请求)。(虽然这种改进对于涉及许多重且独立的IO操作时很重要,但通常情况下也意味着通过重新设计数据结构,您可以消除大量的IO请求,并可能最终获得比仅发出并行化操作更好的性能。)
如果这是真的,那么如何比Java(或PHP、Python等)框架产生更优秀的性能呢?
我还参考了一篇文章Understanding the node.js event loop,该文章也解释了这种情况:
它确实是在运行单个线程:你无法执行任何并行代码;例如,进行“睡眠”将导致服务器阻塞一秒钟:
while(new Date().getTime() < now + 1000) {
// do nothing
}
然而,除了你的代码之外,一切都是并行运行的。
我亲自验证过,将“睡眠”代码放入一个IO回调函数中,并尝试提交请求来引导此回调函数,然后再提交另一个请求。当处理时,两个请求都会触发控制台日志。我的观察是,后者被阻塞直到前者返回响应。
所以,这是否意味着只有在socket模式下,双方可以随时发出事件并推送消息,才能充分利用其异步处理能力的全部功能?
我对此有点困惑。欢迎任何评论或建议。谢谢!
更新
我提出这个问题是因为有一些性能评估案例,例如Node.js正在接管企业——无论您喜欢与否,以及LinkedIn从Rails转向Node:减少了27台服务器,速度提高了20倍。一些激进的观点声称,J2EE将被完全替换:J2EE已死:长命JavaScript,由JSON支持的服务。