我有一个名为 tmpfs /rtmp/
,在 Ubuntu 操作系统上为其分配了 1GB RAM。
我正在使用 bash 脚本进行测试,看看使用将小文本文件写入硬盘是否更快,或者写入此 RAM 驱动器是否更快/rtmp/
。
Bash 脚本写入硬盘
#!/bin/bash
URL="http://some.website/some.txt"
wget -O ~/current/axis_tmp ${URL}
cat ~/current/axis_tmp | grep "^pattern" | tail -n 1 | awk -F',' '{printf("%.0f\n", $3)}' | sed 's/ //g' > ~/current/tmp.txt
sed -i 's/^/X,/' ~/current/tmp.txt
sed -i 's/$/,Y/' ~/current/tmp.txt
exit 0
Bash 脚本写入 tmpfs
#!/bin/bash
URL="http://some.website/some.txt"
wget -O /rtmp/axis_tmp ${URL}
cat /rtmp/axis_tmp | grep "^pattern" | tail -n 1 | awk -F',' '{printf("%.0f\n", $3)}' | sed 's/ //g' > /rtmp/tmp.txt
sed -i 's/^/X,/' /rtmp/tmp.txt
sed -i 's/$/,Y/' /rtmp/tmp.txt
exit 0
运行time
命令后,我得到以下结果:
写入磁盘
real 0m0.554s
user 0m0.022s
sys 0m0.003s
写入 tmpfs
real 0m0.614s
user 0m0.023s
sys 0m0.002s
为什么写入文本文件比将tmpfs
文件写入磁盘慢?处理时间不应该是快点写信给tmpfs
?
答案1
答案2
脚本在完成所请求的工作之前/之后做了很多工作(这里写了一些数据):需要启动 shell 程序(大概已经在内存中,没什么大不了的),初始化其数据区域,定位,读取并解释启动文件(.bashrc
,.bash_profile
在您的家里,系统范围的文件,...),读取并解释其中给出的命令,读取并解释脚本中的命令,依次运行调用的程序,撕裂之后的一切都放下了。您测量的主要是开销,而不是工作本身。
Shell 用于直接用户交互,并且具有一些基本的编程设施(我经常编写一行代码,例如一次性处理多个文件),您也可以编写更实质性的程序(只要性能不那么重要)这可以)。但对于严肃的脚本编写,最好使用专为该任务设计的语言,例如 Python、Perl 或 Raku。这两种脚本替代方案都不是进行严格基准测试的正确工具。至少在没有大量护理的情况下是这样。