我需要在资源有限且对延迟非常敏感的环境中尽快下载并解压缩文件(具有 1 个 cpu、2 个内核、128MB RAM 的虚拟机)
当然,我尝试将下载过程通过管道传输到解压缩过程,并假设我可以在下载的同时解压缩。我知道管道被最慢的进程阻塞。为了克服这个问题,我在下载和解压缩过程之间使用了一个缓冲区。
我的 shell 脚本看起来像这样:
curl -s $CACHE_URL | buffer -S 100M | lz4 -d > /tmp/myfile
Run Code Online (Sandbox Code Playgroud)
如果我首先下载压缩文件,然后在不使用管道的情况下解压缩,则下载大约需要 250 毫秒,如果按顺序执行,解压缩大约需要 250 毫秒。
因此,我的假设是管道方法将花费大约 250-275 毫秒,因为中间没有额外的磁盘读取,并且下载不像解压缩那样受 CPU 限制,因此不会影响那么多。
但事实并非如此。正如我的日志所示,它的速度稍快一些:
Start download
35211K, 81131K/s
Download & decompressed done in 447ms
Starting individual download & decompress
Download done in 234ms
Decompressed : 61 MiB
/tmp/myfile : decoded 75691880 bytes
Decompress done in 230ms
Run Code Online (Sandbox Code Playgroud)
我这里是不是想错了?还有其他方法可以加快这个速度吗?