SLEEP зло или нет?

Печать RSS
276

V
Автор
Пришелец
0
Всем привет. Вопрос может показаться смешным, не знаю.. Но проблема вот в чём, файл должен отправлять запрос сам себе с неким интервалом времени, для этого использую sleep, но сегодня случайно наткнулся на тему в каком то форуме где про sleep всякие гадости написаны smile Погуглил, на одном из форумов слип критикуется (задосил сам себя. молодец. =)запусти у себя на компе 1000 раз # php -r 'sleep(100);' и поймешь (c) хотя у меня 1000 раз запускаться ничего не будет и вообще от пользователей ничего не зависит), а на другом говорят, что слип безобиден и не считается в общем времени выполнения скрипта.. Кому верить?
К

Айсберг Визави
0
зачем? есть моменты когда он нужен, а есть когда не совсем. В твоем случае же логичнее использовать cron
V
Автор
Пришелец
0
2. Кевин Митник_HHTeam, cron неподходит...
1.мне нужно отправлять данные каждые n секунд
2.адрес файла заранее не известен, он создаётся при определённых условиях и после полного выполнения удаляется. знаю выглядит как ***код странно..
T

Пришелец
0
да, он безопасен, если у тебя надёжный хостинг..
А на слабом хосте- это бомба замедленого действия..
V
Автор
Пришелец
0
4. The-All, а можно подробнее, если не трудно? smile

ВЕЛИКИЙ и УЖАСНЫЙ!
0
varloc (2 Ноября 2013 / 15:36)
4. The-All, а можно подробнее, если не трудно? smile
Куда подробнее? php - это такая фигня, которой только дай волю сожрать ресурсы... и он сожрёт. Всё сожрёт.
V
Автор
Пришелец
0
Провёл некий тест.
Файл 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%.

Если я ошибся, пожалуйста скажите. Спасибо за внимание.
А

Оранжевые штаны
0
Не думаю что это даст большую нагрузку. Вообще php создан не для этого, но ни кто не запрещает. На форуме, то что описали: php создаст 1000 процессов и 1000 раз выгрузит себя в озу. Тебе как я понял нужен демон на php. Если ты его запустишь один раз, то ничего страшного, если случайно запустишь несколько раз, получишь неплохую нагрузку.

Напиши скрипт:
<?php
sleep(100);
echo 'ok';
?>
и из браузера запроси эту страницу несколько раз, не дожидаясь результат (нажми несколько раз f5), увидишь что имелось в виду на том форуме.
V
Автор
Пришелец
0
8. Барыга Обама, (Спс за обоснованный ответ smile ) так cron в секундах не запустить, нет? Разве что, что то типо
*/1 * * * * root /home/mybin/script.sh; /bin/sleep 30; /home/mybin/script.sh

и то, первую минуту всё равно надо ждать.
Но тогда какая разница между этим и тем как я делаю ?
А

Оранжевые штаны
0
9. varloc, крон в линуксе "просыпается" раз в минуту. Чаще чем раз в минуту нельзя.
Стикеры / Теги / Правила / Топ тем / Топ постов / Поиск