文档章节

Linux下实现PHP多进程

mickelfeng
 mickelfeng
发布于 2013/01/03 00:41
字数 428
阅读 13
收藏 0

多进程:使用PHP的Process Control Functions(PCNTL/线程控制函数)
函数参考可见:http://www.php.net/manual/zh/ref.pcntl.php
只能用在Unix Like OS,Windows不可用。
编译php的时候,需要加上–enable-pcntl,且推荐仅仅在CLI模式运行,不要在WEB服务器环境运行。

以下为简短的测试代码:

<?php
declare(ticks=1);
$bWaitFlag= FALSE;/// 是否等待进程结束
$intNum= 10;          /// 进程总数
$pids=array();       ///  进程PID数组

echo("Start\n");

for($i= 0;$i<$intNum;$i++) {

  $pids[$i] = pcntl_fork();/// 产生子进程,而且从当前行之下开试运行代码,而且不继承父进程的数据信息

  if(!$pids[$i]) {
    // 子进程进程代码段_Start
    $str="";
    sleep(5+$i);
    for($j=0;$j<$i;$j++) {$str.="*";}
    echo"$i -> ". time() ." $str \n";
    exit();
    // 子进程进程代码段_End
  }

}
if($bWaitFlag)
{
  for($i= 0;$i<$intNum;$i++) {
    pcntl_waitpid($pids[$i],$status, WUNTRACED);
    echo"wait $i -> ". time() ."\n";
  }
}
echo("End\n");
?>

结果:

$ /Applications/XAMPP/bin/php http_fork.php 
Start
End
putclubde:workerman_mickelfeng putclub$ ps -ef |grep php
  501  1472     1   0  9:35下午 ttys001    0:00.00 /Applications/XAMPP/bin/php http_fork.php
  501  1473     1   0  9:35下午 ttys001    0:00.00 /Applications/XAMPP/bin/php http_fork.php
  501  1474     1   0  9:35下午 ttys001    0:00.00 /Applications/XAMPP/bin/php http_fork.php
  501  1475     1   0  9:35下午 ttys001    0:00.00 /Applications/XAMPP/bin/php http_fork.php
  501  1476     1   0  9:35下午 ttys001    0:00.00 /Applications/XAMPP/bin/php http_fork.php
  501  1477     1   0  9:35下午 ttys001    0:00.00 /Applications/XAMPP/bin/php http_fork.php
  501  1478     1   0  9:35下午 ttys001    0:00.00 /Applications/XAMPP/bin/php http_fork.php
  501  1479     1   0  9:35下午 ttys001    0:00.00 /Applications/XAMPP/bin/php http_fork.php
  501  1480     1   0  9:35下午 ttys001    0:00.00 /Applications/XAMPP/bin/php http_fork.php
  501  1481     1   0  9:35下午 ttys001    0:00.00 /Applications/XAMPP/bin/php http_fork.php
  501  1483   298   0  9:35下午 ttys001    0:00.00 grep php
$ 0 ->1525786523  
1 ->1525786524 * 
2 ->1525786525 ** 
3 ->1525786526 *** 
4 ->1525786527 **** 
$ 5 ->1525786528 ***** 
6 ->1525786529 ****** 
7 ->1525786530 ******* 
8 ->1525786531 ******** 
9 ->1525786532 ********* 

 

 

本文转载自:

共有 人打赏支持
mickelfeng

mickelfeng

粉丝 234
博文 2738
码字总数 593177
作品 0
成都
高级程序员
私信 提问
PHP多进程编程骨架 - PHPForker

PHPForker是一个PHP多进程编程骨架,借鉴了Workerman诸多优良编程思想,剥离了其中的网络事件库抽象部分,集中围绕多进程编程,为了便于直观的调试以及保持最轻的多进程骨架,所以简单的内嵌...

blogdaren
2018/10/20
0
0
Workerman —— 高性能的 PHP socket 框架

Workerman 是一个高性能的PHP socket 服务器框架,workerman基于PHP多进程以及libevent事件轮询库,PHP开发者只要实现一两个接口,便可以开发出自己的网络应用,例如Rpc服务、聊天室服务器、...

oschina
2016/03/01
31
0
PHP多进程开发与Redis结合实践

业务逻辑介绍: 用户在 APP 上发帖子,然后存储到 Redis 的 List 列表中 利用 Linux 的 crontab 定时任务功能,按秒请求执行PHP脚本文件(processNewsRedisList.php) 调用 redis_process 处理...

老K8
2018/06/21
0
0
PHP Socket 编程进阶指南

学习准备 Linux 或者 Mac 环境; 安装有 Sockets 扩展; 了解 TCP/IP 协议。 socket函数只是PHP扩展的一部分,编译PHP时必须在配置中添加 配置项来启用。 如果自带的PHP没有编译scokets扩展,...

飞鸿影~
2018/07/11
0
0
PHP 的异步并行和协程 C 扩展 - Swoole

PHP的异步、并行、高性能网络通信引擎,使用纯C语言编写,提供了PHP语言的异步多线程服务器,异步TCP/UDP网络客户端,异步MySQL,异步Redis,数据库连接池,AsyncTask,消息队列,毫秒定时器...

matyhtf
2014/03/03
0
12

没有更多内容

加载失败,请刷新页面

加载更多

C#默认OrderBy()函数的排序问题

昨天在客户现场遇到一个很奇葩的问题,猜下下面代码的排序输出是什么: static void Main(){ List<string> strs = new List<string>(){"11", "12", "1:"}; foreach(string str i......

Airship
27分钟前
2
0
Vue调试神器Vue.js devtools

前言: Vue.js devtools是一个高效的vue项目可视化检查工具,其主要功能就是可以快速查看页面结构、组件中的data变量、computed计算属性、props父组件传过来的值等等 Chrome上的使用方法: 科学...

JamesView
32分钟前
14
0
最全面的IGMP协议总结!

IGMP互联网组管理协议是TCP/IP 协议族中负责IP组播成员管理的协议,用来在IP主机和与其直接相邻的组播路由器之间建立、维护组播组成员关系。 一、IGMP 简介 IGMP(Internet Group Management...

linuxprobe16
36分钟前
1
0
node-sass 安装失败的各种坑

开始的时候引入别人的一个项目 npm install npm run dev 启动项目 报错 > sell@1.0.0 dev E:\web_hwf\Vue\02app > node build/dev-server.js Listening at http://localhost:8888 webpack: w......

黑魔法
38分钟前
1
0
Qemu中PCI设备透传(PCI-Assign)源码分析

在网上看到很多人说Qemu的PCI-Assign透传不支持IOMMU,而VFIO透传却可以(还被当做一种优势进行推荐)。而VFIO跟SRIOV并非有必然联系,那就是说VFIO和PCI-Assign进本都是靠软件实现的了?既然...

LastRitter
40分钟前
8
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部