PHP   发布时间:2022-04-09  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了php进程间通讯实例分析大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

本文实例讲述了PHP进程间通讯的方法分享给大家供大家参考,具体如下:

PHP单进程单线程处理批量任务太慢了,受不鸟了,但是PHP不能多线程,最终选择了多进程处理批量任务.

PHP多进程主要使用for进行分裂,然后利用的unix/linux的信号量进行进程间通讯.

本例使用的是:

生产者=>消费者=>收集器,的模式

.

PHP;">
<>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="">fork();
  if ($consumer_pid == -1) {
    exit("Could not fork!\n");
  } else if ($consumer_pid) {
    // pcntl_wait($status);
    echo "consumer_pid: $consumer_pid\n";
    $consumers_pid[] = $consumer_pid;
  } else {
    $pid = posix_getpid();
    echo "consumer_pid: $pid start\n";
    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!\n");
  }
}
// ===== 产生者 =====
$producer_pid = pcntl_fork();
if ($producer_pid == -1) {
  exit("Could not fork!\n");
} else if ($producer_pid) {
  // pcntl_wait($status);
  echo "producer_pid: $producer_pid\n";
} else {
  $pid = posix_getpid();
  echo "producer_pid: $pid start\n";
  $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,"exit");="" }="" sleep(1);="" msg_send($queue,"exit");="" exit("producer="" ok!\n");="" }="" =="===" 收集器="====" while="" (true)="" {="" msg_receive($queue,$message);="" if="" ($message="=" "exit")="" {="" break;="" }="" echo="" sprintf("%="" 5d:="" %d\n",$message);="" }="" exit("collector="" ok!\n");="">

大佬总结

以上是大佬教程为你收集整理的php进程间通讯实例分析全部内容,希望文章能够帮你解决php进程间通讯实例分析所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: