SLEEP зло или нет?
1.
varloc (02.11.2013 / 04:04)
Всем привет. Вопрос может показаться смешным, не знаю.. Но проблема вот в чём, файл должен отправлять запрос сам себе с неким интервалом времени, для этого использую sleep, но сегодня случайно наткнулся на тему в каком то форуме где про sleep всякие гадости написаны
Погуглил, на одном из форумов слип критикуется (задосил сам себя. молодец. =)запусти у себя на компе 1000 раз # php -r 'sleep(100);' и поймешь (c) хотя у меня 1000 раз запускаться ничего не будет и вообще от пользователей ничего не зависит), а на другом говорят, что слип безобиден и не считается в общем времени выполнения скрипта.. Кому верить?
2.
Кевин Митник (02.11.2013 / 04:37)
зачем? есть моменты когда он нужен, а есть когда не совсем. В твоем случае же логичнее использовать cron
3.
varloc (02.11.2013 / 04:45)
2.
Кевин Митник_HHTeam, cron неподходит...
1.мне нужно отправлять данные каждые n секунд
2.адрес файла заранее не известен, он создаётся при определённых условиях и после полного выполнения удаляется. знаю выглядит
как ***код странно..
4.
The-All (02.11.2013 / 09:55)
да, он безопасен, если у тебя надёжный хостинг..
А на слабом хосте- это бомба замедленого действия..
5.
varloc (02.11.2013 / 13:36)
4.
The-All, а можно подробнее, если не трудно?
6.
Станислав (02.11.2013 / 16:09)
varloc (2 Ноября 2013 / 15:36)
4. The-All, а можно подробнее, если не трудно?
Куда подробнее? php - это такая фигня, которой только дай волю сожрать ресурсы... и он сожрёт. Всё сожрёт.
7.
varloc (02.11.2013 / 19:00)
Провёл некий тест.
Файл 0.php
<?
for($i=0;$i<1000;$i++){
$socket = fsockopen('www.test1.ru', 80, $errno, $errstr, 30);
if(!$socket)die("$errstr($errno)");
fwrite($socket, "GET /pomoyka/00.php?a=".$i." HTTP/1.1\r\n");
fwrite($socket, "Host: www.test1.ru\r\n");
fwrite($socket,"Accept:*/*\r\n");
fwrite($socket,"User-agent:Opera 10.00\r\n");
fwrite($socket,"Connection:Close\r\n");
fwrite($socket,"\r\n");
fclose($socket);
}
Файл 00.php
<?
sleep(10);
$f=file_get_contents('asd.dat');
$fp=fopen("asd.dat","a+");
flock($fp,LOCK_EX);
ftruncate($fp,50);
fputs($fp,$f.','.$_GET['a']);
fflush($fp);
flock($fp,LOCK_UN);
fclose($fp);
}
При выполнение, загрузка ЦП 0%, только на секунду поднялась до 1%
Во второй раз, увеличил цикл до 10000, во время выполнения самого цикла, загрузка была 1-3%, как только цикл завершился, загрузка снова стала 0%.
Если я ошибся, пожалуйста скажите. Спасибо за внимание.
8.
Андрей (02.11.2013 / 20:26)
Не думаю что это даст большую нагрузку. Вообще php создан не для этого, но ни кто не запрещает. На форуме, то что описали: php создаст 1000 процессов и 1000 раз выгрузит себя в озу. Тебе как я понял нужен демон на php. Если ты его запустишь один раз, то ничего страшного, если случайно запустишь несколько раз, получишь неплохую нагрузку.
Напиши скрипт:
<?php
sleep(100);
echo 'ok';
?>
и из браузера запроси эту страницу несколько раз, не дожидаясь результат (нажми несколько раз f5), увидишь что имелось в виду на том форуме.
9.
varloc (02.11.2013 / 20:56)
8.
Барыга Обама, (Спс за обоснованный ответ
) так cron в секундах не запустить, нет? Разве что, что то типо
*/1 * * * * root /home/mybin/script.sh; /bin/sleep 30; /home/mybin/script.sh
и то, первую минуту всё равно надо ждать.
Но тогда какая разница между этим и тем как я делаю ?
10.
Андрей (03.11.2013 / 03:14)
9.
varloc, крон в линуксе "просыпается" раз в минуту. Чаще чем раз в минуту нельзя.
11.
Станислав (03.11.2013 / 09:44)
А что, собственно, требуется сделать-то? Если есть возможность запилить это на bash, то воспользуйся ею.
URL:
https://visavi.net/topics/39380