Смысл в следующем:
Пишу сетевой сканер для служебных целей.
Сканируемая сеть около 10000 узлов.
С одним потоком сканирование занимает более 3 часов.
Нужно ускорить этот процес. Решил разбить на 5 потоков (через fork). Процесс ускорился до 45 минут. Но встали проблемы с оповещением.
Алгоритм примерно следующий:
1 - $isAlert = 0;
2 - создание массивов из IP адресов, по количеству потоков сканирования;
4 - создание потоков сканирования (через fork);
5 - для каждого адреса выполняется определённая проверка. Если условие выполняется, то переходим к следующему адресу. Если нет, то нужно $isAlert присвоить 1;
6 - ожидаем окончания работы всех потоков;
7 - формируем лог;
8 - если $isAlert = 1 отправляем лог по почте админу.
9 - выход.
Всё работает. Не могу побороть только пункт 8. Точнее с 1 потоком никаких проблем нет. А больше не идёт!
P.S. PERL\'ом я занялся месяц назад. Так что жду снисхождения.