我正在计算 LaTeX 文件中的单词数并直观地使用了以下命令:
$ cat *tex | detex | wc -w
然后我立刻注意到他无用的使用cat
,并使用以下代码再次执行了该任务:
$ detex *tex | wc -w
我为自己避免了额外的过程而感到自豪,我想检查一下由于不使用cat
.然后我很惊讶地看到这个版本和 cat
实际上快了 10 倍:
$ time cat *tex | detex | wc -w
5000
real 0m0.013s
user 0m0.005s
sys 0m0.007s
$ time detex *tex | wc -w
5000
real 0m0.144s
user 0m0.124s
sys 0m0.014s
造成如此巨大的速度差异的原因是什么?cat
从磁盘读取文件比从磁盘读取文件快得多吗detex
?
我生成了 5 个示例“LaTeX”文件用于基准测试:
$ for i in {1..5}; do shuf -n 1000 /usr/share/dict/words > "file${i}.tex"; done
答案1
初步结果似乎不一致。
安装了最新detex
版本自制:
$ detex -v
OpenDetex version 2.8.9
https://github.com/pkubowicz/opendetex
得到一个 LaTeX 文件示例:
$ curl https://raw.githubusercontent.com/latex3/latex3/main/articles/2011-current-state.tex > file.tex
制作了 100 个文件副本:
$ for i in {1..100}; do cp file.tex "file${i}.tex"; done
运行该cat
版本 5 次:
$ for i in {1..5}; do time cat *tex | detex | wc -w; done
78174
real 0m0.024s
user 0m0.025s
sys 0m0.012s
78174
real 0m0.021s
user 0m0.023s
sys 0m0.009s
78174
real 0m0.019s
user 0m0.020s
sys 0m0.008s
78174
real 0m0.019s
user 0m0.019s
sys 0m0.008s
78174
real 0m0.017s
user 0m0.018s
sys 0m0.008s
运行非cat
版本 5 次:
$ for i in {1..5}; do time detex *tex | wc -w; done
78174
real 0m0.027s
user 0m0.023s
sys 0m0.009s
78174
real 0m0.024s
user 0m0.021s
sys 0m0.007s
78174
real 0m0.021s
user 0m0.020s
sys 0m0.005s
78174
real 0m0.019s
user 0m0.017s
sys 0m0.005s
78174
real 0m0.018s
user 0m0.016s
sys 0m0.005s