当前位置: 首页 > 后端技术 > PHP

PHP进程之间的通信

时间:2023-03-30 02:16:35 PHP

PHP是用C语言编写的,所以它对系统底层API的操作和C非常相似。和大多数语言一样,PHP进程之间的通信方式有几种:消息队列、管道、共享内存、插座和信号。本文就是对这些通信方式进行梳理:管道通信PIPEpipeline是用来承载之间通信数据的缩写。为了便于理解,可以将管道比作文件。进程A向管道P写入数据,然后进程B从管道P读取数据。php提供的管道操作API与操作文件的API基本相同,只是使用了posix_mkfifo函数来创建管道,而读写等操作同文件操作函数。当然你可以直接用文件来模拟管道,但是这样就不能利用管道的特性了。通过管道进行通信的大致思路是先创建一个管道,然后子进程向管道写入信息,父进程从管道中读取信息,这样父子进程就可以直接通信了。0){取消设置($childList[$childPid]);}}echo"({$parentPid})mainprogressend!\n";运行结果:createproducerprogresses:21432createproducerprogresses:21433createproducerprogresses:21434createconsumerprogresses:21435(21426)progresscreate!2|消费者(21435)销毁(21424)进步创造!1|消费者(21436)销毁创建消费者进度:21436(21426)进度创建!3|消费者(21436)销毁(21426)进步创造!4|消费者(21435)销毁(21425)进步创造!3|消费者(21436)销毁(21424)进步创造!2|消费者(21435)销毁(21426)进步创造!销毁(21424)进度创建!3|consumer(21436)destroy(21433)childprogressend!(21425)progresscreate!4|消费者(21435)销毁(21424)进步创造!4|孩子进步结束!(21424)进步创造!5|消费者(21435)销毁(21425)进步创造!5|消费(21436)销毁(21432)子进程结束!(21435)孩子进步结束!!(21431)mainprogressend!Semaphoreandsharedmemory0){取消设置($childList[$childPid]);}}//释放共享内存和信号量shm_remove($shareMemory);sem_remove($signal);echo"({$parentPid})mainprogressend!\n";运行结果:使用信号量实现共享内存的锁机制父进程pid:31720创建生产者子进程:31721创建生产者子进程:31722(31721)计数:0(31721)计数:1(31721)计数:2(31721)计数:3(31721)计数:4(31721)子进程progressend!createproducerchildprogress:31723(31722)count:5(31722)count:6(31722)count:7(31722)count:8(31722)count:9(31722)childprogressend!(31723)计数:10(31723)计数:11(31723)计数:12(31723))计数:13(31723)计数:14(3172)3)子进程结束!(31720)主进程结束!无锁情况Warning:sem_release():SysVsemaphore4357894312(key0x73048925)isnotcurrentlyacquiredin/Users/easyboom/www/example/semaphoreandsharedmemory.phponline38