pcntl_fork中意外的核心同步()
问题描述:
我正在研究PHP中的多核心优化功能。我的测试程序分成4个过程,每个过程运行两次。 代码是:pcntl_fork中意外的核心同步()
$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);
}
}
现在看看CPU内核负载图形之后,我注意到,有2个核心完成的工作几乎在同一时间: 有时甚至是3芯尝试同步及其负载降低约在同一时间。
问题是 - 根据PHP测试脚本,为什么每个核心都没有完成工作,之前的核心需要两倍的时间?为什么两个内核几乎同时完成工作?
机器规格(lscpu output)
:
CPU(一个或多个):4
在线CPU(s)列表:0-3
螺纹(S)每个核心:2
每个插座的核心数:2
套接字:1
难道这个效应与测试机器只有2个真实核心有关,所以不知何故这种效应与超线程有关?