您好,登錄后才能下訂單哦!
我們在電腦中會運行多個程序,每一個程序中都會有多個線程。
例如我們運行比特幣客戶端的時候,我們某一個線程要處理網絡、某一個線程要處理挖礦、某一個線程要處理用戶輸入…
線程的調度使用了操作系統級別的調度器來明確了哪一個線程應該被執行。線程也有優先級之分,例如監聽鼠標滑動的優先級就會很高,因為其不能等待太長的時間。
為了在給定的時間內更快更多的處理線程:
1、我們可以通過增加CPU的核心數量或者是
2、調度器當監測到線程中運行中斷,如讀取文件網絡時,及時切換到其他的線程中執行。
nodejs是單線程的事件循環機制
偽代碼演示事件循環:
1 | const peningTimers =[]; |
nodejs的單線程,是對于其處理事件循環來講的,有了事件觸發,就會執行相應函數。沒有事件觸發,就會等待。從這個意義上來說,nodejs是單線程的。
但是在處理具體的任務,函數的時候。nodejs確是多線程的。
1 | const crypto = require('crypto'); |
測試pbkdf2速度:1: 868
1 | const crypto = require('crypto'); |
測試pbkdf2速度:
1 | 1: 891 |
說明了pbkdf2函數是多線程來執行的。libuv中默認有4個線程,pbkdf2函數正是借助libuv實現了多線程。
1 | const crypto = require('crypto'); |
1 | 4: 919 |
注意,明顯第5個線程時間增加了一倍,因為默認libuv中默認有4個線程,第5個線程陷入了等待。
1 | process.env.UV_THREADPOOL_SIZE = 5; |
測試速度:
1 | 1: 956 |
1 | const https = require('https'); |
測試速度:
1 | 48 |
https網絡訪問,調用了操作系統資源,libuv只是起到了代理的作用,所以不收到libuv默認4個線程的限制。
本文鏈接: https://dreamerjonson.com/2018/11/09/深度理解nodejs-2/
版權聲明: 本博客所有文章除特別聲明外,均采用 CC BY 4.0 CN協議 許可協議。轉載請注明出處!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。