Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/249.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php pcntl_fork()中意外的内核同步_Php_Multiprocessing_Fork_Pcntl - Fatal编程技术网

Php pcntl_fork()中意外的内核同步

Php pcntl_fork()中意外的内核同步,php,multiprocessing,fork,pcntl,Php,Multiprocessing,Fork,Pcntl,我正在研究PHP的多核优化能力。我的测试程序分叉了4个进程,因此每个进程的运行时间应该是前一个进程的两倍。 代码是: $iters=20000000; 对于($c=0;$c

我正在研究PHP的多核优化能力。我的测试程序分叉了4个进程,因此每个进程的运行时间应该是前一个进程的两倍。 代码是:

$iters=20000000;
对于($c=0;$c<4;$c++){
$pid=pcntl_fork();
如果($pid==0){
对于($i=0;$i<$iters*(pow(2,$c));$i++)

$x=$i我有机会在具有4个物理内核的机器上重复实验。
lscpu
关于机器CPU规格的输出:

中央处理器:4

在线CPU列表:0-3

每个芯的螺纹数:1

每个插座的芯数:4

插座:1个

在运行实验时,我得到了这样的CPU负载图:

所以可以看出,在这种情况下,没有跨核同步,每个核加载的工作量大约是前一个核的两倍。
确认上述影响与测试机有4个虚拟核(2个物理x 2个超线程)相关,而不仅仅是4个物理核。

我有机会在有4个物理核的机器上重复实验。
lscpu
关于机器CPU规格的输出:

中央处理器:4

在线CPU列表:0-3

每个芯的螺纹数:1

每个插座的芯数:4

插座:1个

在运行实验时,我得到了这样的CPU负载图:

所以可以看出,在这种情况下,没有跨核同步,每个核加载的工作量大约是前一个核的两倍。 确认上述影响与测试机有4个虚拟核(2个物理x2超线程)而不仅仅是4个物理核有关

 $iters =  20000000;

 for ($c = 0; $c < 4; $c++) {

    $pid = pcntl_fork();

    if ($pid == 0) {

        for ($i=0; $i < $iters * (pow(2,$c)); $i++)
           $x = $i << 2;

        exit(0);
    }
 }