
설명하다
1. 메시지 큐는 메모리에 저장된 큐입니다.
2. 하나의 프로세스만 메시지 큐의 데이터에 액세스할 수 있으므로 추가 잠금이나 세마포어가 필요하지 않습니다.
예
echo "상위 진행 pid:{$parentPid}n";$childList = array();
//메시지 대기열 생성 및 메시지 유형 정의(데이터베이스의 라이브러리와 유사)
$id = ftok(__FILE__,'m');
$msgQueue = msg_get_queue($id);
const MSG_TYPE = 1;
// 생산자 함수 producer(){
전역 $msgQueue;
$pid = posix_getpid();
$repeatNum = 5;
for ( $i = 1; $i <= $repeatNum; $i++) {
$str = "({$pid})진행 생성! {$i}";
msg_send($msgQueue,MSG_TYPE,$str);
$rand = 랜드(1,3);
수면($rand);
}
}
//소비자 함수 소비자(){
전역 $msgQueue;
$pid = posix_getpid();
$repeatNum = 6;
for ( $i = 1; $i <= $repeatNum; $i++) {
$rel = msg_receive($msgQueue,MSG_TYPE,$msgType,1024,$message);
echo "{$message} | 소비자({$pid}) 파괴 n";
$rand = 랜드(1,3);
수면($rand);
}
}
함수 createProgress($callback){
$pid = pcntl_fork();
if ( $pid == -1) {
//생성 실패exit("포크 진행 오류!n");
} else if ($pid == 0) {
// 하위 프로세스 실행 프로그램 $pid = posix_getpid();
$콜백();
exit("({$pid})하위 진행 끝!n");
}또 다른{
//상위 프로세스가 프로그램을 실행합니다. return $pid;
}
}
// ($i = 0; $i < 3; $i ++ ) {에 대한 3개의 쓰기 프로세스
$pid = createProgress('생산자');
$childList[$pid] = 1;
echo "생산자 하위 생성 진행률: {$pid} n";
}
// ($i = 0; $i < 2; $i ++ ) {에 대한 2개의 쓰기 프로세스
$pid = createProgress('소비자');
$childList[$pid] = 1;
echo "소비자 하위 생성 진행: {$pid} n";
}
// 모든 하위 프로세스가 끝날 때까지 기다립니다. while(!empty($childList)){
$childPid = pcntl_wait($status);
if ($childPid > 0){
unset($childList[$childPid]);
}
}
echo "({$parentPid})주요 진행 끝!n";위 내용은 PHP 메시지 큐에 대한 소개입니다. 모든 사람에게 도움이 되기를 바랍니다.