php 프로 세 스 간 통신 실례 분석
2652 단어 php프로 세 스 간 통신
php 단일 프로 세 스 단일 스 레 드 처리 대량 작업 이 너무 느 려 서 새 를 받 을 수 없습니다.그러나 php 는 다 중 스 레 드 를 할 수 없습니다.최종 적 으로 다 중 프로 세 스 처리 대량 작업 을 선 택 했 습 니 다.
pp 다 중 프로 세 스 는 주로 for 를 사용 하여 분 단 된 다음 에 유 닉 스/linux 의 신 호 량 을 이용 하여 프로 세 스 간 통신 을 합 니 다.
이 예 는 생산자=>소비자=>수집 기 를 사용 하 는 모델 입 니 다.
<?php
// ===== =====
// ipc
$key = ftok(__FILE__, "a");
$queue = msg_get_queue($key);
// ID
$producer_pid = 0;
$consumers_pid = array();
$collector_pid = posix_getpid();
// ===== =====
for ($i=0; $i < 2; $i++) {
$consumer_pid = pcntl_fork();
if ($consumer_pid == -1) {
exit("could not fork!
");
} else if ($consumer_pid) {
// pcntl_wait($status);
echo "consumer_pid: $consumer_pid
";
$consumers_pid[] = $consumer_pid;
} else {
$pid = posix_getpid();
echo "consumer_pid: $pid start
";
while (true) {
msg_receive($queue, $pid, $msgtype, 1024, $message);
if ($message == "exit") {
break;
}
//
$n = intval($message);
msg_send($queue, $collector_pid, $n * $n);
}
exit("consumer ok!
");
}
}
// ===== =====
$producer_pid = pcntl_fork();
if ($producer_pid == -1) {
exit("could not fork!
");
} else if ($producer_pid) {
// pcntl_wait($status);
echo "producer_pid: $producer_pid
";
} else {
$pid = posix_getpid();
echo "producer_pid: $pid start
";
$n = 0;
for ($i=0; $i < 10; $i++) {
foreach ($consumers_pid as $consumer_pid) {
$n++;
msg_send($queue, $consumer_pid, $n);
}
sleep(1);
}
foreach ($consumers_pid as $consumer_pid) {
msg_send($queue, $consumer_pid, "exit");
}
sleep(1);
msg_send($queue, $collector_pid, "exit");
exit("producer ok!
");
}
// ===== =====
while (true) {
msg_receive($queue, $collector_pid, $msgtype, 1024, $message);
if ($message == "exit") {
break;
}
echo sprintf("% 5d: %d
", $msgtype, $message);
}
exit("collector ok!
");
더 많은 PHP 관련 내용 에 관심 이 있 는 독자 들 은 본 사이트 의 주 제 를 볼 수 있다.본 논문 에서 말 한 것 이 여러분 의 PHP 프로 그래 밍 에 도움 이 되 기 를 바 랍 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Laravel - 변환된 유효성 검사 규칙으로 API 요청 제공동적 콘텐츠를 위해 API를 통해 Laravel CMS에 연결하는 모바일 앱(또는 웹사이트) 구축을 고려하십시오. 이제 앱은 CMS에서 번역된 콘텐츠를 받을 것으로 예상되는 다국어 앱이 될 수 있습니다. 일반적으로 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.