pcntl и magic numbers

Farsh

~ on ~ high ~ wave ~
pcntl и magic numbers

Сидел тут че-то и не вдуплял, что за странности у меня в приложении творятся.
Но порылся и нарыл:

PHP:
rand(1, 100);

function func() {
	
	echo 'Я процесс с #' . getmypid() . "\n";
	echo 'Рандомное число - ' . rand(1, 50) . "\n";
	return 0;
	
}

$children = array();
for($i = 0; $i < 3; ++$i) {
	if(($pid = pcntl_fork()) === 0) {
		exit(func());
	} else {
		$children[] = $pid;
	}
}

foreach($children as $pid) {
	$pid = pcntl_wait($status);
	echo 'Процесс #' . $pid . ' завершился' . "\n";
}
Вывод:

Я процесс с #8503
Рандомное число - 30
Я процесс с #8505
Рандомное число - 30
Я процесс с #8504
Рандомное число - 30
Процесс #8503 завершился
Процесс #8505 завершился
Процесс #8504 завершился

Заметил, что если в родителе использовалась rand/mt_rand и в детях таже самая функция, то числа у них будут одни и теже. Если в родителе использовать mt_rand, а в детях rand, например, то все нормально.
Это шо за херня? Видимо как-то связано с генератором чисел, который потом типо как скопировался к детям
 

Farsh

~ on ~ high ~ wave ~
Ясненько ;)
Еще вопрос :
Есть ли какие-нибудь провернные методы организации общих ресурсов между процессами ? Ведь мы когда форкаемся, каждый чайлд получает свою копию данных и работает с ней независимо от других, а хотелось бы, чтоб один чайлд мог быстро что-либо сообщить что-либо другому без полнейшего мудрежа ( как я сейчас делаю это через memcached ) . Как лучше всего такое организовать ?

-~{}~ 24.02.10 10:44:

И по сути, ведь если правильно все подстроить, можно же имитировать полноценные потоки ?? ( Если что, не ругайтесь, я ток взялся за pcntl )
 

fixxxer

К.О.
Партнер клуба
в зависимости от:

1) пайпы, сокеты

2) shared memory

вообще почитай на эту тему литературу по unix-системам и си применительно к.

кейворд: unix ipc

ибо в php все идентично с точностью до префиксов функций.
 
Сверху