php 프로 세 스 간 통신 실례 분석

이 글 의 실례 는 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 프로 그래 밍 에 도움 이 되 기 를 바 랍 니 다.

좋은 웹페이지 즐겨찾기