溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

深度理解nodejs[3]—瘋狂事件代碼

發(fā)布時間:2020-07-20 11:36:04 來源:網(wǎng)絡 閱讀:169 作者:jonson_jackson 欄目:開發(fā)技術

瘋狂的代碼。

下面這段瘋狂的代碼,你能知道它輸出什么結果嗎?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
const https = require('https');
const start = Date.now();
const fs = require('fs');
const crypto = require('crypto');
function dorequest(){
 https.request('https://www.baidu.com',res=>{
   res.on('data',()=>{});
   res.on('end',()=>{
     console.log(Date.now()-start);
   });
 })
 .end();
}


function dohash(){
 crypto.pbkdf2('a','b',100000,512,'sha512',()=>{
   console.log('hash:',Date.now()-start);
 });
}

dorequest();

fs.readFile('test.js','utf8',()=>{
 console.log('FS:',Date.now()-start);
});
dohash();
dohash();
dohash();
dohash();

測試速度:

1
2
3
4
5
6
42
hash: 785
FS: 785
hash: 788
hash: 790
hash: 790

解釋:

  • https不依靠libuv庫的4個默認線程,操作系統(tǒng)資源。其第一個最快的執(zhí)行完畢

  • FS和pbkdf2都使用了libuv中的線程池

  • 一開始FS與三個pbkdf2搶占了libuv線程池的4個線程,但是由于FS讀取文件,中斷操作。libuv將線程切換到執(zhí)行最后一個pbkdf2函數(shù)。

  • 等到某一個pbkdf2函數(shù)執(zhí)行完畢后,則繼續(xù)執(zhí)行FS函數(shù),所以看到了上面的結果。

  • 本文鏈接: https://dreamerjonson.com/2018/11/09/深度理解nodejs-3-—瘋狂事件代碼/

  • 版權聲明: 本博客所有文章除特別聲明外,均采用 CC BY 4.0 CN協(xié)議 許可協(xié)議。轉載請注明出處!

深度理解nodejs[3]—瘋狂事件代碼

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內容。

AI