php并发控制框架 PCF

       php主要用于web开发,但作为一门脚本语言,在web开发中也常常用于处理数据,比如对于异步处理模式,php可能作为独立运行的程序从消息队列读取数据进行处理,再如用php进行相关数据库数据的修复,数据库数据重新构造等。

       在用php处理数据时往往面对的数据量很大,为了快速处理数据,我们往往启动多个php进程进行并发处理,但启动多个进程并不好管理,所以需要一个框架将并发控制的相关细节包装起来,php并发控制框架PCF即是这个目的,让我们写php脚本相关并发程序时,不用关心并发的处理,只关心具体的业务处理,通过使用PCF,我们写的程序即能自动的并发运行起来,根本不用考虑并发处理细节。

      使用PCF的目的是什么呢,主要有两个 :
      1.使并发程序写起来更容易。写的单个脚本可以自动并发跑起来
      2.使并发控制更简单。并发的进程数可以随时增多和减少,特意暂停或意外中止的程序会记录暂停点,下次执行时从暂停点继续执行。

       PCF之于PHP脚本相当于PHP-FPM之于PHP解释器,一是进行进程的并发控制,二是管理对外信息的交互。如下图表示PCF框架运行图:

       

从上图可以看出,PCF主要完成了三个功能:

1.对原始数据的消息进行序列化
2.多进程并发控制 
3.对结果进行汇总处理。

当然,PCF只是提供了一个框架,实现细节由用户代码来实现,用户代码需要实现的的功能 

1.原始数据分割方法
2.单个消息处理逻辑  
3.对最终结果的处理逻辑,当然这个是可选的


       假设我们有如下的数据处理需求: 一共有200个表的数据,每个表有一百万的数据,对于每个数据要进行某种处理。为了高效处理,需要进行并发处理,这时我们可以定义消息为表的编号,如0-199,每于每个表进行相应处理。相应的用户代码假设在文件usercode.php中如下所示:

<?php  

require_once 'currFrame.php';//包含框架代码

define('TABLENUM',10);

//用户类继承框架类
class Example extends CurrFrame { 
	/**
	 * 产生消息
	 */
	public function produce(){
		
		for ($i = 0;$i <TABLENUM ;$i++){
			$this->addMsg($i);//添加消息,此处为表序号
		}
		$this->endMsg(); //结束消息,如果没有更多消息,就要结束,否则总会尝试读取更多消息
	}
	
	/**
	 * 具体处理代码
	 * @param  $msg 当前处理的消息
	 * @param  $pos  当前处理到的位置  
	 */
	public function process($msg,$pos = NULL) {
		
		$no = $msg;
	    $j = $pos ==NULL ? 0:$pos;
	   
		for(;$j<10;$j++){
		    //此处放具体处理逻辑
		    
			$this->recordProcess($j); //记录处理进度
		}
	}
	
	/**
	 *所有进程运行完成后执行的代码
	 */
	public function output(){
		
	}
}

$obj = new Example();
$obj->run();







相关代码的解释见注释

启动并发只要执行 php usercode.php batch 3 ,表示启动3个并发,可以随时更改并发的参数,也可以设为0,表示停止所有的处理

框架代码已上传至github : https://github.com/micweaver/PCF


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值