Performance
cmp 比 diff -q 快嗎?
在最近關於檢查某些文件是否具有不同內容的 Ask Ubuntu 問題中,我看到一條評論指出,如果不同的部分無關緊要,
cmp
將比diff
. 這個堆棧溢出答案cmp
同意,給出了在第一個不同字節處停止的原因。但是,GNUdiff
有-q
(or--brief
) 標誌,它應該是report only when files differ
.diff
一旦發現任何差異,GNU 也會停止比較似乎是合乎邏輯的(就像在指定orgrep
時在第一次匹配後停止搜尋一樣)。-l``-q
在 Linux 系統的上下文中,是否
cmp
真的比diff -q
可能具有 GNU 版本的系統更快?
在@josten 的提示下,我對兩者進行了比較。程式碼在GitHub 上。簡而言之:
User+Sys 所花費的時間
cmp -s
似乎比diff
大多數情況下要多一點。然而,實時拍攝幾乎是任意的——cmp
在某些方面diff
領先,在某些方面領先。總結:
性能上的任何差異純屬巧合。隨心所欲地使用。
使用來自Anthon的類似但更大的文件(100M 行,僅在最後一個不同):
yes | head -n 100000000 >aa sed '$ s/d/e/' >ab
我得到
diff -q
和的時間無法區分cmp -s
:/tmp% time diff -q aa ab Files aa and ab differ diff -q aa ab 0.04s user 0.33s system 99% cpu 0.370 total /tmp% time cmp -s aa ab cmp -s aa ab 0.04s user 0.36s system 99% cpu 0.403 total
cmp
比 慢cmp -s
。大概計算行號是一個很大的負擔。/tmp% time cmp aa ab aa ab differ: char 499999999, line 100000000 cmp aa ab 0.84s user 0.36s system 97% cpu 1.225 total
這是在 Debian wheezy amd64 上,全部從 RAM 執行(在 tmpfs 上)。
cmp -s
具有被所有 POSIX 平台和 BusyBox 支持的優勢。