我刚刚开始在node.js中编写代码一段时间.现在,这是我的一个问题:
在HTTP应用程序中,给定请求 - 响应模型,单个应用程序线程被阻塞,直到所有后端任务完成并且响应返回给客户端,因此性能改进似乎仅限于微调后端事务,如微调并行化IO请求.(当涉及到涉及许多繁重且独立的 IO操作时,这种改进很重要,但通常条件还意味着通过重新设计数据结构,您可以消除大量IO请求,并可能最终获得更好的性能而不仅仅是发布并行操作.)
如果这是真的,那么它怎么能比那些基于Java(或PHP,python等)的框架产生更好的性能呢?
我还提到了一篇文章了解node.js事件循环,这也解释了这种情况:
它实际上是一个单线程运行:你不能执行任何并行代码执行; 例如,进行"休眠"将阻止服务器一秒钟:
while(new Date().getTime() < now + 1000) {
// do nothing
}
Run Code Online (Sandbox Code Playgroud)
...但是,除了你的代码之外,一切都是并行的.
我个人验证了通过将"睡眠"代码完全放入一个IO回调闭包,并尝试提交导致此回调的请求,然后提交另一个.两个请求在处理时都会触发控制台日志.我的观察是后者被阻止,直到前者回复了一个回复.
那么,它是否意味着只有在套接字模式下,双方都可以随时发送事件并相互推送消息,是否可以充分利用其异步处理能力?
我有点困惑.欢迎提出任何意见或建议.谢谢!
更新
我问这个问题是因为报告了一些性能评估案例,例如Node.js正在接管企业 - 无论你喜欢与否,LinkedIn从Rails迁移到节点:27台服务器切割速度提高了20倍.一些激进的观点声称J2EE将被完全取代:J2EE已死:由JSON Services支持的长期Javascript.