Задача на сообразительность: ограничитель производительности
Вопрос не корректный как по мне...
п.с. Туманно как то вы задаете вопросы ! (Правильно поставленый вопрос - это половина успеха, и вероятность что вам кто то поможет выше)
Запускать скрипт cron-ном раз в минуту(или чаще, как нужно), все необходимые операции производить во внутреннем представлении скрипта! (т.е. запускать процедуру или нет, будет решать сам скрипт) как то так, но это гадание на кофейной гуще, как и поставленый вопрос ...
{
sleep(mt_rand(1, 100000));
}
foo - это пример процедуры, которую надо вызывать как можно, чаще но не чаще N раз в минуту. Минута любая. Только 100000 - это много.
зы как запускать задачу кроном чаще, чем раз в минуту?
напишите демон, который фиксирует момент запуска, затем запускает "черный ящик". перед запуском - увеличивайте счетчик. проверяйте - если счетчик превысил N раз, то смотрите - прошло ли минута.
60000 милисекунд (1 минута) делим на N и получаем период запуска задачи T милисекунд. Можно после каждого запуска задачи выжыдать T и запускать ее по новой. Если время выполнения задачи критично, то постоянно измеряем время выполнения задачи и вычисляем среднее арифметическое S. В итоге корректируем наш период T по формуле: T = (60000 - S * N) / N
Надеюсь ясно?
кажется, в этом варианте не учитывается, что минута может начинаться с любой секунды. с какой неизвестно.
Надеюсь ясно?
Не очень. За какой период среднее?
Среднее арифметечекское времени работы задачи. По всем запускам, или, например, по первым двумстам. Это время нужно чтобы откорретировать период ожидания до следующего запуска.
Вычисляем T = 60000/N
Запускаем процедуру и замеряем время ее выполнения (t)
Если T-t>0 то добавляем задержку на T-t, мс
Есть еще одна идея, как не перегрузить сервер запросами. С того момента, как будут приходить ответы, отправлять один запрос на один ответ.
Как все это написать на PHP?
Как это будет работать, если сервер тормозит?
Каким еще способом сервер может измерять, что на него приходит много запросов с одной и той же кукой?
почему? у вас есть время запуска с которого начат отсчет N. при достижении N - вы вычисляете текущее время минус время запуска. вот вам проверка на минуту. при начале нового отсчета N - время устанавливается заново
Потому что у нас нет времени запуска, с которого начат отсчет N. Можно начать отсчет с любой секунды.
ну так и начинайте. и сохраняйте это время