内容简介:PHP提供了一个Pcntl扩展,Pcntl基于Linux的进程,Windows系统暂时没有这个扩展,用于实现基础的多进程实现,可以利用这个处理一个很耗时的任务,例如发订阅邮件,短信,站内信等。参考链接:
PHP提供了一个Pcntl扩展,Pcntl基于 Linux 的进程,Windows系统暂时没有这个扩展,用于实现基础的多进程实现,可以利用这个处理一个很耗时的任务,例如发订阅邮件,短信,站内信等。
参考链接:
http://php.net/manual/zh/ref....
http://php.net/manual/zh/ref....
http://blog.csdn.net/huyanpin...
http://rango.swoole.com/archi...
https://www.lvtao.net/dev/php...
示例代码:
代码是基于 Laravel 框架的,建议使用此框架来允许这部分代码。
public function index(Request $request)
{
pcntl_signal(SIGCHLD, SIG_IGN); //如果父进程不关心子进程什么时候结束,子进程结束后,内核会回收。
$max = 8000;
$workers = 10;
$pids = array();
for($i = 0; $i < $workers; $i++){
$pids[$i] = pcntl_fork();
$pid = posix_getpid();
switch ($pids[$i]) {
case -1:
echo "fork error : {$i} \r\n";
exit;
case 0:
$param = array(
'lastid' => $max / $workers * $i,
'maxid' => $max / $workers * ($i+1),
);
$this->doSomething($pid, $param);
exit;
default:
break;
}
}
foreach ($pids as $i => $pid) {
if($pid) {
//父进程会得到子进程号,所以这里是父进程执行的逻辑
//如果不需要阻塞进程,而又想得到子进程的退出状态,则可以注释掉pcntl_wait($status)语句,或写成:
pcntl_wait($status,WNOHANG); //等待子进程中断,防止子进程成为僵尸进程。
//pcntl_waitpid($pid, $status);
}
}
}
// 可以看到那个子进程在处理哪些数据
public function doSomething($filename, $param)
{
for ($i = $param['lastid']; $i < $param['maxid']; $i++) {
$path = "./test/";
if (!is_dir($path)){
mkdir($path, 0777, true);
}
$content = $i . '|';
$file = $path . $filename . ".txt";
file_put_contents($file, $content, FILE_APPEND);
}
}
更多建议读文档,进程和线程,还有很多内容的,需要读书去学习了
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Game Programming Patterns
Robert Nystrom / Genever Benning / 2014-11-2 / USD 39.95
The biggest challenge facing many game programmers is completing their game. Most game projects fizzle out, overwhelmed by the complexity of their own code. Game Programming Patterns tackles that exac......一起来看看 《Game Programming Patterns》 这本书的介绍吧!