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密集 低運算 的場景。可以參考我的另一個回答