【发布时间】:2019-03-27 11:12:32
【问题描述】:
我有一个worker.php文件如下
<?php
$data = $argv[1];
//then some time consuming $data processing
我使用 gnu 并行将其作为穷人的工作队列运行
while read LINE; do echo $LINE; done < very_big_file_10GB.txt | parallel -u php worker.php
当我在 4 个 cpu 机器上时,通过分叉 4 个 php 进程来工作。
但对我来说它仍然感觉很同步,因为读取 LINE 仍然是一次读取一行。
由于它是 10GB 文件,我想知道是否可以通过将其拆分为 n 个部分(其中 n = 我的 CPU 数量)以某种方式使用并行并行读取同一文件,这将使我的导入速度快 n 倍(理想情况下)。
【问题讨论】:
-
查看
parallel --pipe和parallel --pipe-part。另外,考虑更改worker.php以查看和循环多个参数,以便一次调用可以处理许多参数/行 - 原因是您目前为文件的每一行都支付了启动全新 PHP 解释器的代价!如果您使worker.php能够处理大量行,则可以使用parallel -X并获得更好的性能。 -
运行一个作业需要多长时间?
标签: php gnu-parallel