PHP多进程编程

php要使用多进程需要安装pcntl扩展,扩展安装方法百度即可。使用pcntl_fork来fork出多个进程来并行执行代码。

pcntl_fork
pcntl_fork — 在当前进程当前位置产生分支(子进程)。译注:fork是创建了一个子进程,父进程和子进程 都从fork的位置开始向下继续执行,不同的是父进程执行过程中,得到的fork返回值为子进程 号,而子进程得到的是0。

实例:

<?php

if (!function_exists('pcntl_fork')) {
    die("pcntl extention is must !");
}

$pid = pcntl_fork();
if ($pid == -1) {
    die("创建子进程失败!");
} elseif ($pid) { 
    // > 0
    // 父进程逻辑
    pcntl_wait($status); // 等待子进程结束,为了防止子进程变成僵尸进程
} else {
    // 0
    // 子进程逻辑
}

多进程可以用来进行大文件的处理,如一个文件有几亿行数据,则可以将文件拆分成多个小文件进程处理。(百度好看视频面试题)

假如文件有10万行,则可以拆分成4个文件,每个文件2.5万行,可以使用split。

<?php

shell_exec('split -l 25000 -d access.log prefix_name')

// 3个子进程处理
for ($i = 0; $i < 3; $i++) {
    $pid = pcntl_fork();
    if ($pid == -1) {
        die("创建子进程失败!");
    } elseif ($pid) {
        // 父进程
    } else {
        $content = file_get_contents("prefix_name0" . $i);
        // 处理逻辑
        exit;
    }
}

while (pcntl_waitpid(0, $status) != -1) {
    $status = pcntl_wexitstatus($status); // 回收子进程
    echo "回收进程" . $status;
}

  转载请注明: Mantis PHP多进程编程

 上一篇
Nginx深入了解-基础(一) Nginx深入了解-基础(一)
Centos下Nginx安装的正确姿势;Nginx安装有很多种方式,但是在centos下如何能够快速且按照nginx官方标准的安装nginx呢? 首先登录nginx官方网站:http://nginx.org,点击右侧download菜
2018-07-17 Mantis
下一篇 
Nginx与php-fpm之间的通信方式及区别 Nginx与php-fpm之间的通信方式及区别
nginx服务器和php-fpm可以通过tcp socket和unix socket两种方式实现。 unix socket是一种终端,可以使同一台操作系统上的两个或多个进程进行数据通信。这种方式需要在nginx配置文件中填写php-fpm
2018-03-24 Mantis