您的位置:首页 > 其它

gearman 与pcntl配合使用

2016-04-26 14:51 218 查看
Gearman是一个分布式的任务分发处理系统。

但是它无法完成启动多线程的任务,所以在一台机器上只用Gearman无法实现并行,

即使new了很多GearmanWorker也是只有一个worker工作。

应该使用pcntl_fork()出一些子进程,在每个子进程中new一个GearmanWorker,

这样就可以实现并行处理了。

for ($i=0; $i < 10; $i++) {
if (($pid = pcntl_fork()) == 0) {
//子进程
$gmworker = new GearmanWorker();
$gmworker->addServer();
$gmworker->addFunction("sendmail", "sendmail_fn");
while($gmworker->work());
} else {
//主进程
}
}

while (1);


合理分配好任务数量和每个任务的工作量有助于提升处理速度。

还有一点很重要,GearmanClient::doBackgroud   GearmanClient::addTaskBackgroud的区别,

可以参考 http://stackoverflow.com/questions/12689274/whats-the-difference-between-a-task-and-do 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  gearman 多线程 pcntl