PHP进程及进程间通信

PHP进程及进程间通信

ID:47403008

大小:51.00 KB

页数:7页

时间:2019-07-04

PHP进程及进程间通信_第1页
PHP进程及进程间通信_第2页
PHP进程及进程间通信_第3页
PHP进程及进程间通信_第4页
PHP进程及进程间通信_第5页
资源描述:

《PHP进程及进程间通信》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、PHP进程及进程间通信一、引言进程是一个具有独立功能的程序关于某个数据集合的一次运行活动。换句话说就是,在系统调度多个cpu的时候,一个程序的基本单元。进程对于大多数的语言都不是一个陌生的概念,作为”世界上最好的语言PHP”当然也例外。二、环境php中的进程是以扩展的形式来完成。通过这些扩展,我们能够很轻松的完成进程的一系列动作。-pcntl扩展:主要的进程扩展,完成进程创建于等待操作。-posix扩展:完成posix兼容机通用api,如获取进程id,杀死进程等。-sysvmsg扩展:实现systemv方式的进程间通

2、信之消息队列。-sysvsem扩展:实现systemv方式的信号量。-sysvshm扩展:实现systemv方式的共享内存。-sockets扩展:实现socket通信。这些扩展只能在linux/mac中使用,window下是不支持。最后建议php版本为5.5+。相关代码:进程相关代码三、简单的例子一个简单的PHP多进程例子,该例子中,一个子进程,一个父进程。子进程输出5次,退出程序。$parentPid=posix_getpid();echo"parentp

3、rogresspid:{$parentPid}";$childList=array();$pid=pcntl_fork();if($pid==-1){//创建失败exit("forkprogresserror!");}elseif($pid==0){//子进程执行程序$pid=posix_getpid();$repeatNum=5;for($i=1;$i<=$repeatNum;$i++){echo"({$pid})childprogressisrunning!{$i}";$rand=rand(1,3);

4、sleep($rand);}exit("({$pid})childprogressend!");}else{//父进程执行程序$childList[$pid]=1;}//等待子进程结束pcntl_wait($status);echo"({$parentPid})mainprogressend!";完美,终于创建了一个子进程,一个父进程。完了么?没有,各个进程之间相互独立的,没有任何交集,使用范围严重受到现在。怎么办,哪就进程间通信(interprogresscommunication)呗。四、进程间

5、通信(IPC)通常linux中的进程通信方式有:消息队列、信号量、共享内存、信号、管道、socket。1.消息队列消息队列是存放在内存中的一个队列。如下代码将创建3个生产者子进程,2个消费者子进程。这5个进程将通过消息队列通信。$parentPid=posix_getpid();echo"parentprogresspid:{$parentPid}";$childList=array();//创建消息队列,以及定义消息类型(类似于数据库中的库)$id=f

6、tok(__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($ran

7、d);}}//消费者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}

8、consumer({$pid})destroy";$rand=rand(1,3);sleep($rand);}}functioncreateProgr

9、ess($callback){$pid=pcntl_fork();if($pid==-1){//创建失败exit("forkprogresserror!");}elseif($pid==0){//子进程执行程序$pid=posix_getpid();$callback();exit("({$pid})childprogressend!"

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。