簡體   English   中英

為什么在循環中調用 readFile 時幾乎同時調用回調?

[英]Why is the callback called at almost the same time when the readFile is called in a loop?

var fs = require('fs')
function test() {
    for(let i=0; i<10   ; i++) {
        console.time(i)
        fs.readFile(`test2.txt`, function out(err, data) {
            if(err) {
                return console.error(err)
            }
            console.timeEnd(i)
        })
        
    }
}

test()

輸出:

6:114.242ms

2:120.270ms

1:120.644ms

4:120.946ms

9:121.326ms

0:122.458ms

7: 121.973 毫秒

3:122.365ms

8:122.652ms

5:123.059ms

當我增加循環次數時,所有回調的打印時間幾乎相同。

假設您的同步代碼運行需要 x 毫秒,而您的回調需要大約 y 毫秒,所有回調在大約 x 毫秒后排隊。 大約 y 毫秒后,所有回調開始完成。

所以 fe 調用fs.readFile() 10 次,需要~5ms,回調需要~110ms 到~120ms,在~5ms 之后所有回調都在運行,~115ms 之后它們都開始完成。

您要求 javascript 讀取一個文件,該文件將調用 os 功能以獲取文件,因為您每次都在緩存中讀取同一個文件,因為它是最近讀取的,因此它將非常快速地獲取文件假設您的文件大小非常小,以毫秒為單位。

現在關於時間幾乎相同, console.time 和 console.endTime 將為您提供讀取文件而不是打印系統的實際時間所花費的時間。 我認為你誤解了功能。

主要原因可能是您的回調沒有任何計算嘗試隨機等待一定時間

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM