本文主要介绍如何使用多核CPU来加速你的Linux命令。本文非常详细,具有一定的参考价值。有兴趣的朋友一定要看!
你有过需要计算非常大的数据量(几百GB)的经历吗?或者内部搜索,或者其他操作——,一些不能并行的操作。数据专家,我在和你说话。你可能有一个4核以上的CPU,但是我们合适的工具,比如grep,bzip2,wc,awk,sed等。是单线程的,只能使用一个CPU内核。
借用漫画人物卡曼的话“这些内核我怎么用”?
为了让Linux命令使用所有的CPU内核,我们需要使用GNU Parallel命令,这使得我们所有的CPU内核在一台机器上做神奇的减图操作。当然,这也依赖于很少使用的- pipes参数(也称为- spread stdin)。这样你的负载就会平均分配到每个CPU上,真的。
BZIP2
Bzip2是比gzip更好的压缩工具,但是非常慢!不用麻烦了,我们有办法解决这个问题。
以前的做法:
catbigfile . bin | bzip2-bestcompensedfile . bz2现在是这样的:
catbigfile . bin | parallel-pipe-recent ' '-kbzip2-bestcompensedfile . bz2特别是对于bzip2,GNU并行在多核CPU上超级快。不小心就完了。
GREP
如果您有一个非常大的文本文件,您可能以前是这样的:
现在你可以这样做了:
catbigfile . txt | parallel-pipe grep ' pattern '或类似的内容:
catbigfile . txt | parallel-block 10M-pipe grep ' pattern ',第二种用法使用block 10M参数,这意味着每个内核处理1000万行,——。您可以使用此参数来调整每个CPU内核处理多少行数据。
AWK
下面是一个使用awk命令计算非常大的数据文件的例子。
一般用法:
catrand20m . txt | awk ' { s=$ 1 } end { prints } '现在是这样的:
catrand20m . txt | parallel-pipe awk ' { s= $ 1 } end { prints } ' | awk ' { s=$ 1 } end { prints } '有点复杂:parallel命令中的pipe参数将cat输出分成几个块,分派给awk call,形成许多子计算操作,这些子计算通过第二个管道输入同一个awk命令,从而输出最终结果。第一个awk有三个反斜杠,这是GNU parallel调用awk所必需的。
WC
想尽快算出一个文件的行数?
传统做法:
现在你应该这样做:
catbigfile . txt | parallel-pipe WC-l | awk ' { s=$ 1 } end { prints } '非常聪明。首先使用并行命令“mapping”进行大量的wc -l调用形成子计算,最后通过管道发送到awk进行汇总。
SED
你想用sed命令在一个巨大的文件中做大量的替换操作吗?
一般惯例:
Seds^old^new^gbigfile.txt现在你可以:
catbigfile . txt | parallel-pipes eds old new g…然后您可以使用pipes将输出存储在指定的文件中。
文章“如何使用多核CPU加速你的Linux命令”的内容就这么多了。谢谢大家看!希望分享的内容对大家有帮助,更多相关知识。欢迎关注桂哥网络!