我在 Node.js 專案中將一些 shell 子行程轉換為 JavaScript,出于好奇,我想看看命令之間的區別(cat與專案無關,只是想看看它們有多快)。echotime
time echo "Hello World!"
當我得到以下輸出時:
Hello World!
real 0m0.000s
user 0m0.000s
sys 0m0.000s
不完全為零,但我從cat命令中得到了類似的輸出:
time cat compile.js
import Build from "./src/build.js";
Build.main();
real 0m0.003s
user 0m0.003s
sys 0m0.000s
部分或全部time欄位表示0m0.000s。這是否意味著它的處理速度如此之快以至于無法測量time?如果沒有,發生了什么?
uj5u.com熱心網友回復:
echo(作為內置的 shell)可能需要不到 1 毫秒的時間來執行。
請注意,相當大的實時是由于/bin/echo我幾乎從未使用過的初始啟動。后續運行速度要快得多,因為可執行檔案快取在記憶體中,無需再次加載到磁盤中
cat需要 3 毫秒,幾乎所有這些都花在了用戶級代碼上,而不是系統級代碼上。實際時間與用戶時間相同,因為例如,行程在等待 I/O 完成時不會被中斷以執行其他操作。在更繁忙的系統(或運行較長的命令)上,您可能會看到實際時間超過了用戶和系統時間的總和。
使用/bin/echo而不是內置的 shell 可能具有指導意義,因為您在第一次執行和后續執行時會得到非常不同的結果:
bash-4.4$ time /bin/echo "Hello World!"
Hello World!
real 0m0.113s
user 0m0.001s
sys 0m0.003s
bash-4.4$ time /bin/echo "Hello World!"
Hello World!
real 0m0.002s
user 0m0.001s
sys 0m0.001s
我幾乎從不使用它/bin/echo,所以這可能是自上次重新啟動計算機以來我第一次使用它。113 毫秒的大部分時間都用于將可執行檔案加載到記憶體中,并在記憶體中進行快取,因此不需要為第二次執行重新加載。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/488843.html
