我們在電腦中會運行多個程序,每一個程序中都會有多個線程。
例如我們運行比特幣客戶端的時候,我們某一個線程要處理網(wǎng)絡、某一個線程要處理挖礦、某一個線程要處理用戶輸入…
線程的調(diào)度使用了操作系統(tǒng)級別的調(diào)度器來明確了哪一個線程應該被執(zhí)行。線程也有優(yōu)先級之分,例如監(jiān)聽鼠標滑動的優(yōu)先級就會很高,因為其不能等待太長的時間。
為了在給定的時間內(nèi)更快更多的處理線程:
1、我們可以通過增加CPU的核心數(shù)量或者是
2、調(diào)度器當監(jiān)測到線程中運行中斷,如讀取文件網(wǎng)絡時,及時切換到其他的線程中執(zhí)行。
nodejs是單線程的事件循環(huán)機制
偽代碼演示事件循環(huán):
1 | const peningTimers =[]; |
nodejs的單線程,是對于其處理事件循環(huán)來講的,有了事件觸發(fā),就會執(zhí)行相應函數(shù)。沒有事件觸發(fā),就會等待。從這個意義上來說,nodejs是單線程的。
但是在處理具體的任務,函數(shù)的時候。nodejs確是多線程的。
1 | const crypto = require('crypto'); |
測試pbkdf2速度:1: 868
1 | const crypto = require('crypto'); |
測試pbkdf2速度:
1 | 1: 891 |
說明了pbkdf2函數(shù)是多線程來執(zhí)行的。libuv中默認有4個線程,pbkdf2函數(shù)正是借助libuv實現(xiàn)了多線程。
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網(wǎng)絡訪問,調(diào)用了操作系統(tǒng)資源,libuv只是起到了代理的作用,所以不收到libuv默認4個線程的限制。
本文鏈接: https://dreamerjonson.com/2018/11/09/深度理解nodejs-2/
版權聲明:本博客所有文章除特別聲明外,均采用 CC BY 4.0 CN協(xié)議 許可協(xié)議。轉(zhuǎn)載請注明出處!
另外有需要云服務器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務器、裸金屬服務器、高防服務器、香港服務器、美國服務器、虛擬主機、免備案服務器”等云主機租用服務以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應用場景需求。
網(wǎng)頁名稱:深度理解nodejs[2]-事件循環(huán)-創(chuàng)新互聯(lián)
標題鏈接:http://chinadenli.net/article4/deihie.html
成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供微信公眾號、定制網(wǎng)站、App設計、標簽優(yōu)化、服務器托管、網(wǎng)站改版
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容