설명하다
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 메시지 큐에 대한 소개입니다. 모든 사람에게 도움이 되기를 바랍니다.