84669 人学习
152542 人学习
20005 人学习
5487 人学习
7821 人学习
359900 人学习
3350 人学习
180660 人学习
48569 人学习
18603 人学习
40936 人学习
1549 人学习
1183 人学习
32909 人学习
假设单核CPU下安装一个node程序, 程序里面很简单, 一个http服务器, 有请求进来, 延迟5秒返回结果(可以理解了5s同步做一些事情)
当有3个请求同时进来时, 请问结果会是哪个场景:场景1:第一个请求在5秒后拿到结果, 第二个和第三个是在10s和15s后拿到结果场景2:所有请求都是5秒后拿到结果
如果换成java+tomcat, 会是哪种场景, 谢谢大家!
如果是同步的延迟 5秒,且 node.js 为简单的单线程运行,不加入 cluster 等优化
同步的
const start = Date.now(); while(Date.now() - start < 5000) { ; } return res.send();
那么,多个请求同时发起时,场景1
但通常在 node.js 很少真的碰到完全阻塞的同步等待 5 秒,如果是下列情况:
同步等待 5 秒
setTimeOut(() => { return res.send(); }, 5000);
那结果当然是场景2
场景2
至于 Java ,并发是多线程支撑的,在机能足够的情况下,比如并发仅仅为3,可以粗略的视为是:场景2。当然由于涉及到线程开销,在并发量上升之后,其内存的占用将远超 node.js 的模型
实际上这也是为什么我们说 node.js 更加适合 IO密集 低运算 的场景。可以参考我的另一个回答
如果是
同步的
延迟 5秒,且 node.js 为简单的单线程运行,不加入 cluster 等优化那么,多个请求同时发起时,场景1
但通常在 node.js 很少真的碰到完全阻塞的
同步等待 5 秒
,如果是下列情况:那结果当然是
场景2
至于 Java ,并发是多线程支撑的,在机能足够的情况下,比如并发仅仅为3,可以粗略的视为是:场景2。当然由于涉及到线程开销,在并发量上升之后,其内存的占用将远超 node.js 的模型
实际上这也是为什么我们说 node.js 更加适合 IO密集 低运算 的场景。可以参考我的另一个回答