您好,欢迎来到三六零分类信息网!老站,搜索引擎当天收录,欢迎发信息

PHP IPC on Linux

2025/11/23 14:13:57发布29次查看
这几天,由于工作原因,需要将一个php写的后台程序重串行执行改成并行执行。这样必然涉及到多线程/多进程相关技术。php貌似没有成熟的多线程机制,而有相对成熟的多进程机制。多进程编程,必然涉及到ipc(inter-process communication)。php的ipc技术还是相当多的,可以在php源代码目录下(php_src/ext)看到sysvshm,sysvsem,sysvmsg,shmop等扩展,这些都可以用于ipc,下面简单介绍一下:
pcntl - 提供进程相关操作函数 sysvsem - 信号量,全称为system v semphore,可以用于限制访问共享资源的进程数目,一般设置为1,当作互斥锁使用 sysvshm - 共享内存,全称system v shared memory,用于提供共享内存机制,特点是省去了客户代码序列化和反序列化的麻烦,变量级别的访问控制,十分好用,属于菜鸟使用的方式。 shmop - 共享内存操作扩展,与sysvshm的区别在于是比特级别的控制,需要手动序列化和反序列化,但是如果紧缺使用,内存使用率比sysvshm高,属于高手进阶方式。 sysvmsg - 消息队列,一种特殊的共享内存,具体使用可以参见这里。  
下面是使用sysvsem的列子,作为备忘,具体的内容参见代码,这里只提出几个关键需要注意的地方:
shm_attach和sem_get的方法的key需要与主进程id关联,避免两个组件同时运行打搅,因为共享内存和信号量是系统级别的资源,进程之间会公用,如果不处理,会导致多个实例之间出现混乱。 父进程在等待子进程时,忙等会消耗大量cpu,采用sleep的方式,可以避免忙等。 父进程等待子进程最好有超时机制,避免无限制等待 子进程逻辑必须在规定的地方退出,不能执行父进程的代码,否则会混乱。常见的方式是用try catch包裹子进程的逻辑,抓到异常后,退出。
相关资料
php ipc: http://blog.csdn.net/eroswang/article/details/2195260
php ipc system v 和shmop:  http://liangfen1224.blog.163.com/blog/static/72377647201111163317325/
该用户其它信息

VIP推荐

免费发布信息,免费发布B2B信息网站平台 - 三六零分类信息网 沪ICP备09012988号-2
企业名录 Product