我正在研究PHP中的多核优化能力。我的测试程序分叉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);
}
}
现在看了CPU核心负载图后,我注意到2个核心几乎同时完成了工作: 有时甚至3个核心都会尝试同步,并且它们的负载大约在同一时间内下降。
问题是 - 根据PHP测试脚本,为什么每个核心都没有完成工作,因为之前的核心需要两倍的时间?为什么两个核心几乎同时完成工作?
机器规格(lscpu output)
:
CPU:4
在线CPU列表:0-3
每个核心的线程:2
每个插座的核心:2
Socket(s):1
这种效果是否与测试机器只有2个真实内核相关,所以这种效果与超线程有关?