php消息队列如何实现

分类:免费建站 时间:2025年02月23日 来源:网络

今天小编给大家分享一下php消息队列如何实现的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。

说明

1、消息队列是存放在内存中的一个队列。

2、由于消息队列去数据是,只有一个进程能去到,所以不需要额外的锁或信号量。

实例

echo"parentprogresspid:{$parentPid}\n";$childList=array();//创建消息队列,以及定义消息类型(类似于数据库中的库)$id=ftok(__FILE__,'m');$msgQueue=msg_get_queue($id);constMSG_TYPE=1;//生产者functionproducer(){global$msgQueue;$pid=posix_getpid();$repeatNum=5;for($i=1;$i<=$repeatNum;$i++){$str="({$pid})progresscreate!{$i}";msg_send($msgQueue,MSG_TYPE,$str);$rand=rand(1,3);sleep($rand);}}//消费者functionconsumer(){global$msgQueue;$pid=posix_getpid();$repeatNum=6;for($i=1;$i<=$repeatNum;$i++){$rel=msg_receive($msgQueue,MSG_TYPE,$msgType,1024,$message);echo"{$message}|consumer({$pid})destroy\n";$rand=rand(1,3);sleep($rand);}}functioncreateProgress($callback){$pid=pcntl_fork();if($pid==-1){//创建失败exit("forkprogresserror!\n");}elseif($pid==0){//子进程执行程序$pid=posix_getpid();$callback();exit("({$pid})childprogressend!\n");}else{//父进程执行程序return$pid;}}//3个写进程for($i=0;$i<3;$i++){$pid=createProgress('producer');$childList[$pid]=1;echo"createproducerchildprogress:{$pid}\n";}//2个写进程for($i=0;$i<2;$i++){$pid=createProgress('consumer');$childList[$pid]=1;echo"createconsumerchildprogress:{$pid}\n";}//等待所有子进程结束while(!empty($childList)){$childPid=pcntl_wait($status);if($childPid>0){unset($childList[$childPid]);}}echo"({$parentPid})mainprogressend!\n";

以上就是“php消息队列如何实现”这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注行业资讯频道。

关于本站 博客网站 友情链接 广告合作 我要投稿 搜索资源 联系我们 订阅本站 购买主机
  • 账号登录
社交账号登录