[英]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.