大佬教程收集整理的这篇文章主要介绍了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,请注明来意。