forks – Stepan Suvorov Blog https://stepansuvorov.com/blog Release 2.0 Mon, 02 Jul 2012 12:34:50 +0000 en-US hourly 1 https://wordpress.org/?v=6.3.1 Совсем немного о многопроцессовости в PHP https://stepansuvorov.com/blog/2012/07/%d1%81%d0%be%d0%b2%d1%81%d0%b5%d0%bc-%d0%bd%d0%b5%d0%bc%d0%bd%d0%be%d0%b3%d0%be-%d0%be-%d0%bc%d0%bd%d0%be%d0%b3%d0%be%d0%bf%d1%80%d0%be%d1%86%d0%b5%d1%81%d1%81%d0%be%d0%b2%d0%be%d1%81%d1%82%d0%b8/ https://stepansuvorov.com/blog/2012/07/%d1%81%d0%be%d0%b2%d1%81%d0%b5%d0%bc-%d0%bd%d0%b5%d0%bc%d0%bd%d0%be%d0%b3%d0%be-%d0%be-%d0%bc%d0%bd%d0%be%d0%b3%d0%be%d0%bf%d1%80%d0%be%d1%86%d0%b5%d1%81%d1%81%d0%be%d0%b2%d0%be%d1%81%d1%82%d0%b8/#comments Mon, 02 Jul 2012 12:33:35 +0000 http://stepansuvorov.com/blog/?p=265 Continue reading ]]> Только ключевые моменты:

– магия происходит с помощью функции pcntl_fork.

– работает только в CGI и CLI-режимах

– немного кода

$pid = pcntl_fork();
// создался дочерний процесс, все просто
// но дальше основная магия: выполнение едет в 2 независимых потока
// и все что будет дальше выполнится 2 раза
// резонный вопрос: как нам определить основной потом и дочерний
// а вот так:
if ($pid == -1) {
    //функции не удалось создать поток - ошибка
} elseif ($pid) {
    //если идентификатор есть - это родительский поток
} else {
    //если нет - соответственно дочерний
}
i++; //а этот код будет выполнен обеими потоками

– теперь пример

$pid = pcntl_fork();
if ($pid == -1) {
     die('Error of pcntl_fork');
} elseif ($pid) {
    echo '[first]';
} else {
    echo '[second]';
}
echo '[both]';

Выполним через командную строку:

$ php fork.php
[first][both][second][both]

Вот такой вот порядок.

]]>
https://stepansuvorov.com/blog/2012/07/%d1%81%d0%be%d0%b2%d1%81%d0%b5%d0%bc-%d0%bd%d0%b5%d0%bc%d0%bd%d0%be%d0%b3%d0%be-%d0%be-%d0%bc%d0%bd%d0%be%d0%b3%d0%be%d0%bf%d1%80%d0%be%d1%86%d0%b5%d1%81%d1%81%d0%be%d0%b2%d0%be%d1%81%d1%82%d0%b8/feed/ 2