Ich untersuche Multi-Core-Optimierung Fähigkeiten in PHP. Mein Testprogramm forkiert 4 so, dass jeder doppelt so lange laufen soll wie vorher. -Code ist:Unerwartete Kerne Synchronisation in 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);
}
}
nun nach an CPU-Kernen Last Graph sucht, habe ich bemerkt, dass zwei Kerne Job beendet ist fast zur gleichen Zeit: Manchmal sogar drei Kerne versucht, zu synchronisieren und ihre Last fällt ca. in der gleichen Zeit.
Frage ist - Warum jeder der Kerne nicht beendet Job nach zweimal so viel Zeit vorherigen Kern nach PHP-Test-Skript benötigt? Und warum zwei Kerne fast gleichzeitig ihren Job beenden?
Maschinenspezifikationen (lscpu output)
:
CPU (s): 4
On-line CPU (s) Liste: 0-3
Thread (s) pro Kern: 2
Core (e) pro Sockel: 2
Socket (s): 1
Kann es sein, dass dieser Effekt damit zusammenhängt, dass die Testmaschine nur 2 echte Kerne hat, also ist dieser Effekt irgendwie mit Hyper-Threading verbunden?