Нет, нет, нет.
PHP не имеет сложных средств управления блокировками для одновременного доступа к необработанным файлам.Мало языков делают.Это не значит, что их невозможно реализовать (проще всего с мьютексами).
Я не хочу, чтобы эти скрипты постоянно находились в базе данных
СУБД обеспечивают отличную поддержку одновременного доступа.И хотя при выполнении операции с БД возникают накладные расходы, она очень мала по сравнению с объемом работы, который будет генерировать каждый запрос.Это также очень удобный субстрат для управления очередью заданий.
у них всех есть своя очередь
Почему?использование общей очереди по принципу «первым пришел - первым обслужен» обеспечит наилучшее использование ресурсов.
Сначала я просто случайно выбрал «сценарий процесса»
Это позволит равномерно распределить работу с очень большим количеством заданий и хорошим генератором случайных чисел.Один из подходов заключается в разделении данных (например, экземпляр 1 выбирает задания, где mod (job_number, number_of_instances) = 0, экземпляр выбирает задания, где mod (job_number, number_of_instances) = 1 ....) - но даже тогда это ненаилучшее использование доступных ресурсов.
все они в данный момент находятся в цикле while () и sleep (5) все время
Нет - это тоже неправильно.
Неэффективно, чтобы экземпляры постоянно опрашивали пустую очередь - поэтому вы реализуете план back-ofr, например,
$maxsleeptime=100;
$sleeptime=0;
while (true) {
$next_job=get_available_job_from_db_queue();
if (!$next_job) {
$sleeptime=min($sleeptime*2, $maxsleeptime);
sleep($sleeptime);
} else {
$sleeptime=0;
process_job($next_job);
mark_job_finished($next_job);
}
}
Никакое задание не предназначено для конкретного процессора, пока этот процессор не заберет его из очереди.Записывая время сна (или начало и конец обработки), также намного легче увидеть, когда вам нужно добавить больше процессорных сценариев - и если вы обрабатываете параллелизм в базе данных, вам не нужно беспокоиться о настройке каждого сценария длязнать о количестве запущенных других скриптов - вы можете добавлять и удалять экземпляры по мере необходимости.