(не) многопоточность в php
Была задача выполнять длительные операции не дожидаясь завершения текущей операции.
так как в php многопоточности нет, я сделал так:
foreach ($operations as $operation) {
shell_exec("php script.php ".$operation['id']." 2>/dev/null >/dev/null &");
}
Таким образом на каждую операцию одновременно запускается один и тот же скрипт который работает с переданной ему операцией $operation['id']
И это очень хорошо для меня работает.
Хотелось бы узнать, есть ли какие-то недостатки такого решения?
Буду благодарен за полезную информацию!
Ответы (1 шт):
Автор решения: HardlinePeak
→ Ссылка
Это вполне рабочий способ, но (как уже сказал человечек в комментариях) могут возникнуть сложности если понадобится отслеживать порождённые процессы. Также, для ознакомления, хочу рассказать о двух модулях:
- PThreads: Модуль, предоставляющий объектно-ориентированный API для работы с многопоточностью в PHP (он нравится мне гораздо больше чем следующий (хоть и "считается неподдерживаемым и мёртвым")). Подробнее см. тут: https://www.php.net/manual/ru/intro.pthreads.php
- Parallel: Модуль параллельного выполнения для PHP ≥ 7.2.0. Подробнее см. тут: https://www.php.net/manual/ru/intro.parallel.php