Всем критикам «PHP не подходит для многозадачности»:
Сделайте шаг назад и подумайте, что в вашем распоряжении есть отличная многопоточная среда, если вы находитесь в среде LAMP. Используйте эту базовую архитектуру в своих интересах - то есть Apache - это многопоточный менеджер - и чертовски хорош в этом.
Очень легко настроить PHP для работы в этой среде.
- Установите max_execution_time = 0, чтобы позволить сценариям работать бесконечно
- Установите ignore_user_abort = true, чтобы разрешить выполнение сценариев даже после
клиент прервал
Разработка облегченных веб-сервисов REST для одной задачи. Разработайте их так, чтобы вам было все равно, когда они возвращаются, например, в системе очередей. Запись в очередь является поточно-ориентированной, а удаление из очереди - поточно-ориентированной, если выполняется с некоторыми базовыми мьютексами на уровне ОС.
«разветвлять» веб-сервисы так же просто, как открыть файл:
fclose(fopen("http://somewebservice....php?a1=v1&a2=v2&....")); // Launch a web service and continue...
Мало того, что этот подход является многопоточным, но он также является распределенным. Веб-сервис может быть локальным или расположен по всему миру. PHP, конечно, не волнует.
Для базовой системы единственное, что вас сдерживает, - это количество потоков, разрешенных Apache. В противном случае ваш код готов воспользоваться преимуществами балансировки нагрузки и всеми остальными хитростями, которые могут предложить передовые реализации Apache.
Слишком часто, когда разработчики думают, что они «многопоточные», они думают: «О боже, я должен обрабатывать форки и execs, а также ждать и PID». И если вы разрабатываете свою систему таким образом - вы правы, она очень быстро усложняется. Сделай шаг назад и используй то, что дано. У вас есть доступ к каталогам? Бум - у вас есть очереди. Вы можете совершать веб-звонки? Boom - у вас есть многопоточное (распределенное) приложение. Теперь просто объедините понятия, как того требует ваше приложение.