【发布时间】:2017-02-27 02:55:49
【问题描述】:
我刚刚开始在 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 is taking over the Enterprise – whether you like it or not, 和LinkedIn Moved from Rails to Node: 27 Servers Cut and Up to 20x Faster。 一些激进的观点声称 J2EE 将被完全取代:J2EE is Dead: Long-live Javascript Backed by JSON Services。
【问题讨论】:
-
您从哪里得知它具有任何性能优势,更不用说“显着”优势了?
-
@EJP 在某些情况下会被报告,例如Node.js is taking over the Enterprise – whether you like it or not 和LinkedIn Moved from Rails to Node: 27 Servers Cut and Up to 20x Faster。一些激进的观点声称 J2EE 将被 Javascript + JSON 服务完全取代(java.dzone.com/articles/j2ee-dead-long-live-javascript)
标签: java performance node.js sockets http