php sleep против bash sleep - PullRequest
       8

php sleep против bash sleep

2 голосов
/ 22 марта 2012

У меня есть php-скрипт, который мне нужно запускать каждые 5 секунд (запустить, подождать, пока это не будет сделано, подождать 5 секунд, запустить снова)

У меня есть два способа сделать это.либо используйте в скрипте цикл infinte с функцией сна, которая будет выглядеть следующим образом:

while (1)
{
   do_stuff();
   sleep 5;
}

, либо используйте скрипт bash, который будет запускать скрипт и ждать 5 секунд.Это выглядело бы так:

while [ 1 ]; do
    php script.php &
    wait
    sleep 5
done

Мне было интересно, какой самый эффективный способ сделать это.

Скрипт php, который я запускаю, является контроллером codeigniter, который выполняет много вызовов базы данных..

Ответы [ 3 ]

8 голосов
/ 22 марта 2012

Если вы делаете много вызовов БД, тогда делайте сон в php.Таким образом, вы не платите штраф за запуск php, штраф за соединение с базой данных и т. Д. ... это может произойти, если вы спите в bash.

Когда вы выполняете bashЦикл, вы будете запускать / запускать / выходить из вашего скрипта каждую итерацию, и эти накладные расходы быстро накапливаются в долгосрочных скриптах.

С другой стороны, по крайней мере, вы начнете с «чистого»окружение каждый раз, и вам не придется беспокоиться об утечках памяти в вашем скрипте.Возможно, вы захотите объединить оба, так что вы зацикливаетесь / спите в PHP (скажем) 100 раз, затем завершаете работу и зацикливаетесь в Bash.

1 голос
/ 22 марта 2012

Это может зависеть от того, что еще делает система. Я думаю, что решение BASH может быть лучше обработано системой, чтобы высвободить ресурсы для других приложений.

Кажется, что количество обращений к базе данных будет менее важным, потому что вам нужно сделать это в любом случае. Стоимость запуска сценария из BASH - это время для сборки и сокращения структуры CodeIgniter. Но CodeIgniter уже разработан для этого в обычном веб-приложении и работает достаточно быстро.

1 голос
/ 22 марта 2012

Как правило, все PHP-скрипты имеют тайм-аут - если вы не запускаете из CLI - поэтому ваш первый метод будет работать от 30 до 60 секунд (в зависимости от конфигурации вашего сервера), а затем будет принудительно завершен.

IЯ бы хотел предложить либо параметр командной строки, либо даже (и это зависит от того, как часто вы хотите, чтобы код выполнялся) команду cron для ее выполнения.

...