比方说,我有一个64核服务器,我需要计算md5sum
所有文件/mnt/data
,并将结果存储在一个文本文件中:
find /mnt/data -type f -exec md5sum {} \; > md5.txt
Run Code Online (Sandbox Code Playgroud)
上述命令的问题是,在任何给定时间只运行一个进程.我想利用我的64核的全部功能.理想情况下,我想确保在任何给定时间,64个并行md5
进程正在运行(但不超过64个).
也.我需要将所有进程的输出存储到一个文件中.
注意:我不是在寻找一种md5sum
并行计算一个文件的方法.我正在寻找一种方法来并行计算64个不同文件的64 md5sums,只要有来自的文件find
.
Ste*_*eve 23
使用GNU parallel
.您可以在此处找到有关如何实现它的更多示例.
find /mnt/data -type f | parallel -j 64 md5sum > md5.txt
Run Code Online (Sandbox Code Playgroud)
您也可以使用xargs,它可能比某些发行版上的并行更多.
-P控制生成的进程数.
find /mnt/data -type f | xargs -L1 -P24 md5sum > /tmp/result.txt
Run Code Online (Sandbox Code Playgroud)
如果你想试验,试试安装md5deep
.(http://md5deep.sourceforge.net)
-jnn控制多线程.默认情况下,程序将创建一个生产者线程来扫描文件系统,每个CPU核心创建一个散列线程.多线程导致输出文件名以非确定性顺序排列,因为散列时间较长的文件将被延迟.如果需要确定性顺序,请指定-j0以禁用多线程
如果这没有帮助,那么您就有I/O瓶颈.
归档时间: |
|
查看次数: |
6679 次 |
最近记录: |