[TOC]
# 多进程使用
******
怎么才能在一个 php 脚本中,开启多进程处理呢?这里我们可以使用2种方法(注意,本教程只适用于 linux,php-cli 环境)
## pcntl 扩展
pcntl 是 php 官方的多进程扩展,只能在 linux 环境使用,例如:
```php
<?php
$num = 1;
$str = "EasySwoole,Easy学swoole\n";
$pid = pcntl_fork(); // 新开一个子进程,上面的变量内存将会复制一份到子进程中,这个函数,在主进程中返回子进程进程id,在子进程中返回0,开启失败时在主进程返回-1
echo $str; // 这下面的代码,将会被主进程,子进程共同执行
if ($pid > 0) { // 主进程代码
echo "我是主进程,子进程的pid是{$pid}\n";
} elseif ($pid == 0) {
echo "我是子进程,我的pid是" . getmypid() . "\n";
} else {
echo "我是主进程,我现在慌得一批,开启子进程失败了\n";
}
```
详细内容可自行搜索了解
<br />
## swoole 扩展
swoole 扩展是面向生产环境的 PHP 异步网络通信引擎,它也有着进程管理模块。
```php
<?php
$num = 1;
$str = "EasySwoole,Easy学swoole\n";
$process = new swoole_process(function () use ($str) { // 实例化一个进程类,传入回调函数
echo $str; // 变量内存照常复制一份,只不过swoole的开启子进程后使用的是回调方法运行
echo "我是子进程,我的pid是" . getmypid() . "\n";
});
$pid = $process->start(); // 开启子进程,创建成功返回子进程的PID,创建失败返回false
echo $str;
if ($pid > 0) { // 主进程代码
echo "我是主进程,子进程的pid是{$pid}\n";
} else {
echo "我是主进程,我现在不慌了,失败就失败吧\n";
}
```
详细内容可自行搜索了解。
- 引言
- Introduction
- 运行模式
- php-fpm
- php-cli
- 基础介绍
- 网络协议
- ip
- tcp
- tcp
- http
- webSocket
- udp
- port端口
- 会话管理
- cookie
- session
- api/token
- linux基础
- lnmp安装
- 命令
- 进程管理
- 扩展安装
- 端口监控
- 防火墙说明
- php7.0
- 部分新特性
- php回调/闭包
- 回调事件
- 闭包/匿名函数
- php多进程
- 多进程开启
- 进程通信
- 进程信号
- 僵尸进程
- 孤儿进程
- 守护进程
- 同步/异步
- 阻塞/非阻塞
- 协程
- Swoole
- 初始Swoole
- 运行机制
- 生命周期
- composer使用
- EasySwoole
- 设计理念
- 组件说明
- 运行过程
- demo
- 提问的艺术