Многопоточность в PHP
Ну как известно штатно её нет (с). А иногда очень хочется. Предлагаемая пока альтернатива разработчками — функция Fork() которая по сути создает дочерний процесс, куда передает все открытые соединения, значения переменных и т.п. и продолжает в дочернем процессе с того момента с которого процесс в «родителе» начат. Один нюанс — при завершении дочернего процесса — все соединения закрываются. Обходить этот нюанс можно посылая сигнал posix_kill(posix_getpid(), SIGHUP); в дочернем процессе в случае нужды его завершить.
Таким образом «эталонная» реализация «многопоточности» в PHP будет выглядеть примерно так:
1 2 3 4 5 6 7 8 9 10 11 |
какойто код... какойто код... //предстоит длительная трудоемкая задача $child_pid = pcntl_fork(); if ($child_pid==0){ //длительная ресурсоемкая задача echo "--завершил дочерний процесс\n"; posix_kill(posix_getpid(), SIGHUP); } else { echo "--стартовал дочерний процесс\n"; }; |