У меня есть несколько сценариев, которые нужно запускать одновременно как отдельные процессы. Мой план состоит в том, чтобы выполнить задание cron, выполняющее несколько экземпляров этих скриптов с заданным интервалом. Это хорошая идея? Каковы плюсы и минусы этого подхода? Есть ли другие варианты, которые мне нужно рассмотреть?
Bottomline: Я пытаюсь имитировать многопоточность. Любые условия гонки будут обрабатываться с помощью кода (например, настройка статусов в БД и т. Д.). Сценарии должны выполнять интенсивные задачи обработки (например, создание эскизов и т. Д.).
Вы можете использовать forking. Сценарий запуска загружает все конфигурации и инициализации по умолчанию, а затем обрабатывает дочерние процессы fork для обработки. Затем он мог отслеживать процессы, чтобы убедиться, что они все еще работают. http://php.net/manual/en/function.pcntl-fork.php
Ну, если вам это нужно, как крона, продолжайте. Если вы хотите несколько процессов, вы, скорее всего, захотите использовать pcntl_fork для создания нескольких экземпляров одного и того же сценария.
В зависимости от того, как быстро вы хотите реагировать на эти задания, и если вы хотите выполнять интенсивные задачи с процессором, вы также можете разложить эту обработку с помощью системы очередей. Проверьте Gearman или beanstalkd с несколькими рабочими на машину, если у вас несколько ядер / процессоров.
Разве PHP не имеет fork()
? Хотя это не очень многопоточность, это основной способ совместной работы.
Один из кодов использования cron состоит в том, что он выполнит копию вашего скрипта с установленным интервалом независимо от того, сколько скриптовых процессов уже запущено. Это означает, что скрипты нуждаются в способе общения друг с другом, чтобы одновременное выполнение максимально N сценариев выполнялось одновременно (избыточные скрипты могут сразу выйти).
Альтернативой cron может быть супервизор, который будет выполнять настраиваемое количество сценариев и контролировать каждый из них, чтобы любой выход был обновлен.