Т.е. ты предлагаешь, чтобы у меня все осталось без изменений?? Фоновые процессы все дружно тупо ломяться в MySQL с запросом
SELECT count(*) FROM comproxy
WHERE status=0 AND (forThread IS NULL OR forThread=$this->thread)
каждые 50 мс? Причем, если кол-во не нуль, нужно залочить всю таблицу, повторно выполнить запрос на чтение НОВОГО запроса, поставить туда status=1 (+номер потока, начало времени обработки), разлочить и начать выполнять. По окончанию в нужную ячейку вернуть результат (или в мемкеш).
PHP:
if (time()>=$cronTouth) {
@touch("live-$this->thread.tmp");
$cronTouth=time()+10;
}
$qty=$db->value("
SELECT count(*) FROM comproxy
WHERE status=0 AND (forThread IS NULL OR forThread=$this->thread)";
if (!$qty) continue; // ушли на usleep и повтор цикла
$q=$db->query("LOCK TABLES comproxy write");
$q=$db->query("UPDATE comproxy SET status=-2 WHERE status=0 AND timeOut<now()");
$line=$db->line("SELECT * FROM comproxy WHERE status=0 LIMIT 1");
if (!$line) {
$q=$db->query("UNLOCK TABLES");
continue;
}
echo "\r\n<< begin $line[id] >>\r\n";
$q=$db->query("UPDATE comproxy SET status=1, timeBegin=now(), runThread=$this->thread WHERE id=$line[id]");
$q=$db->query("UNLOCK TABLES");
$cmd=unserialize($line['queryFull']); // начало выполнение запроса
Я задал этот вопрос потому, что считаю текущий метод работы кривым. Его спасает то, что фоновых потоков всего 3, из-за их тяжести (300 метров ОЗУ) и мусорные запросы внутри одного хоста (между пхп и базой) не дают никакой нагрузки на сеть. А завтра это будут обычные пхп-скрипты. И их будет сотня. И на другом хосте. MySQL ляжет от тупых запросов.
Идеальный вариант, кроме того, что он ЭФФЕКТИВНЫЙ и МАЛОЗАТРАТНЫЙ:
1. фоновые потоки просыпаются только при наличии нового запроса
2. основной поток спит до получения ответа
> если процессы выполняются на одной машине, постановщика можно усыплять и будить
Приведи плиз пример такой связи между двумя независимыми процессами.
> если на разных - слушать порт udp
Мне кажется не надежным метод самому (т.е. веб-скрипту) открывать порты и через него ждать событий. Хотя, этот вариант очевидный и не порождает мусорного трафика.