многопоточность выполнения скрипта

jo

Новичок
многопоточность выполнения скрипта

Здравствуйте уважаемые.
Вопрос такой: для обновления таблицы ARP на никс. сервере
требуется пингануть все ip адреса из файла
делаю так:
$ip_ping = file("tmp_ip.txt");
foreach ($ip_ping as $k=>$v) {
exec("/bin/ping -n -c 1 -w 1 -s 1 $v");
}
все работает, но вот диапазон адресов большой, порядка 300,
на пинг одного адреса уходит чуть меньше секунды, в целом уходит времени около 5 минут, за это время таблица устаревает.
Каким образом сделать пинг многопоточным, для сокращения времени?
 

Falc

Новичок
Сделай скрипт который пингует, а другим запускай его в фоновом режиме.
 

jo

Новичок
Здравствуйте.
Falc ты не совсем верно понял меня. Мне надо пинговать не последовательно все IP , а например по 10 паралельно
нашел в мане pcntl_fork
<?php

$pid = pcntl_fork();
if ($pid == -1) {
die("could not fork");
} else if ($pid) {
// это родитель
} else {
// это потомок
}

?>
Но вот не понял как это использовать в моем конкретном случае.
Объясните пожалуйста, если не затруднит.
 

Фанат

oncle terrible
Команда форума
РНР - это, конечно, самый лучший инструмент для таких задач.
просто только для них и разрабатывался.
 

jo

Новичок
Автор оригинала: Фанат
РНР - это, конечно, самый лучший инструмент для таких задач.
просто только для них и разрабатывался.
Фанат, спасибо конечно, что ответил, но я же не про это спрашивал.
Я хочу понять как работает механизм!
Прежде чем задать свой вопрос, я пробовал решить задачу самостоятельно, посмотрел ман (но не понял, как такое сделать) искал в поиске ит.д., чтоб понапрасну не отвлекать ваше время и только после этого задал вопрос.
Потому и прошу показать мне на примере, как одновременно (параллельно) открыть i++ файлов или пингануть i++ хостов, а не один за другим.
 

Фанат

oncle terrible
Команда форума
А если я попрошу на примере рассказать мне, как из самосвала сделать холодильник? причем ман - на удивление просто - не помогает!

Тебе русским языком сказали - не делай этого на РНР!
сделай на перле, на шелле!
не предназначен РНР для таких целей!
 

jo

Новичок
Автор оригинала: Фанат
А если я попрошу на примере рассказать мне, как из самосвала сделать холодильник? причем ман - на удивление просто - не помогает!

Тебе русским языком сказали - не делай этого на РНР!
сделай на перле, на шелле!
не предназначен РНР для таких целей!
это возможно:
разобрать самосвал, переплавить и т.д.)
Нужно ли это делать это другой вопрос.
Компьютер не предназначался для взлома других компьютеров, однако ломают :(

если не знаешь ответ на мой вопрос, то просто не пиши ничего, а не рассказывай, что лучше купить новый и т.д.
Ведь если знаешь как сделать, то лучше бы написал несколько строк кода.
 

FreeSpace

Чукча-читатель
Я полностью согласен с Фанатом относительно того, что эта затея - изврат, но сам знаю как минимум два способа её реализации.
1. pcntl_fork, с которым сам не работал, потому что пишу скрипты под виндой (до никсов ещё не дорос), а тут эта фишка, конечно же, не работает.
2. Скрипт-родитель локально подключается по HTTP к скриптам-детям, используя неблокирующие сокеты ([m]stream_set_blocking[/m]).
 

young

Новичок
Харош спам разводить.
Естиь только одно правильное решение задачи с пингами - использование MultiPing (fping), проверено на личном опыте.

многопоточность
не путать многопоточность и многопроцесовость :)
 
Сверху