6. PCNTL
• Pararelizace pomocí procesů
$pid = pcntl_fork();
if ($pid === -1) {
throw new RuntimeException('Cannot fork');
}
if ($pid) {
pcntl_wait($status); // we do not want zombies
}
else {
$this->runChild();
}
7. Problémy
• Obtížná komunikace mezi procesy
• Sdílené file descriptory
– SQLSTATE[HY000] [2013] Lost connection to MySQL server during query
– SQLSTATE[HY000]: General error: 2006 MySQL server has gone away
private function runChild() {
$this->connection = new Connection(…);
}
8. Pararelní skripty
• Bez nutnosti speciálních rozšíření
– Stačí jen naplánovat úlohy
• Velmi omezené možnosti komunikace
– Databáze nebo soubor
9. Zásady pro práci s databází
• Transakce skoro nevyhnutelné
– Jaká úroveň izolace je třeba?
• Časté deadlocky
– Nutné s nimi počítat a umět je ustát