最新消息:XAMPP默认安装之后是很不安全的,我们只需要点击左方菜单的 "安全"选项,按照向导操作即可完成安全设置。

PHP的Pcntl多进程扩展基础使用

XAMPP案例 admin 1263浏览 0评论

示例代码:

代码是基于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);

}

}
更多建议读文档,进程和线程,还有很多内容的,需要读书去学习了

转载请注明:XAMPP中文组官网 » PHP的Pcntl多进程扩展基础使用

您必须 登录 才能发表评论!