Я пишу сценарий, которому необходимо выполнить одновременные задачи в php. < /p>
Я провел небольшой тест и столкнулся с странным результатом. Я использую pcntl_fork для генерации ребенка. Родительский процесс ничего не делает, кроме как ждать, пока ребенок завершит. По какой -то причине - все дети генерируют одинаковое число. < /P>
Вот пример кода: < /p>
private $_child_count = 0;
private function _fork_and_exec($func)
{
$cid = ++$this->_child_count;
$pid = pcntl_fork();
if ($pid){ // parent
return $pid;
} else { // child
$func($cid);
//pcntl_waitpid(-1, $status);
exit;
}
}
public function parallel_test()
{
$func = function($id){
echo 'child ' . $id . ' starts'."\n";
$wait_time = mt_rand(1,4);
echo 'sleeping for '.$wait_time."\n";
sleep($wait_time);
echo 'child ' . $id . ' ends'."\n";
};
$children = [];
for ($i=0; $i_fork_and_exec($func) ."\n";
}
pcntl_wait($status);
echo 'done' ."\n";
exit;
}
< /code>
Пример вывода: < /p>
child 1 starts
sleeping for 1
child 2 starts
sleeping for 1
child 3 starts
sleeping for 1
child 4 starts
sleeping for 1
child 5 starts
sleeping for 1
child 1 ends
child 2 ends
child 3 ends
child 4 ends
child 5 ends
done
< /code>
заранее спасибо < /p>
Подробнее здесь: https://stackoverflow.com/questions/148 ... al-results
Вызов rand/mt_rand на раздвоенных детях дает идентичные результаты ⇐ Php
Кемеровские программисты php общаются здесь
-
Anonymous
1744234370
Anonymous
Я пишу сценарий, которому необходимо выполнить одновременные задачи в php. < /p>
Я провел небольшой тест и столкнулся с странным результатом. Я использую pcntl_fork для генерации ребенка. Родительский процесс ничего не делает, кроме как ждать, пока ребенок завершит. По какой -то причине - все дети генерируют одинаковое число. < /P>
Вот пример кода: < /p>
private $_child_count = 0;
private function _fork_and_exec($func)
{
$cid = ++$this->_child_count;
$pid = pcntl_fork();
if ($pid){ // parent
return $pid;
} else { // child
$func($cid);
//pcntl_waitpid(-1, $status);
exit;
}
}
public function parallel_test()
{
$func = function($id){
echo 'child ' . $id . ' starts'."\n";
$wait_time = mt_rand(1,4);
echo 'sleeping for '.$wait_time."\n";
sleep($wait_time);
echo 'child ' . $id . ' ends'."\n";
};
$children = [];
for ($i=0; $i_fork_and_exec($func) ."\n";
}
pcntl_wait($status);
echo 'done' ."\n";
exit;
}
< /code>
Пример вывода: < /p>
child 1 starts
sleeping for 1
child 2 starts
sleeping for 1
child 3 starts
sleeping for 1
child 4 starts
sleeping for 1
child 5 starts
sleeping for 1
child 1 ends
child 2 ends
child 3 ends
child 4 ends
child 5 ends
done
< /code>
заранее спасибо < /p>
Подробнее здесь: [url]https://stackoverflow.com/questions/14879151/calling-rand-mt-rand-on-forked-children-yields-identical-results[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия