Swoole 进程管理模块 Process 之单进程的使用
PHP 自带的 pcntl,存在很多不足,如:
- 没有提供进程间通信的功能;
- 不支持重定向标准输入和输出;
- 只提供了
fork这样原始的接口,容易使用错误;
Swoole\Process 提供了如下特性:
- 可以方便的实现进程间通讯;
- 支持重定向标准输入和输出,在子进程内
echo不会打印屏幕,而是写入管道,读键盘输入可以重定向为管道读取数据; - 提供了
Swoole\Process->exec()接口,创建的进程可以执行其他程序,与原PHP父进程之间可以方便的通信; - 在协程环境中无法使用
Swoole\Process模块,可以使用runtime hook+proc_open实现,参考协程进程管理;
使用示例:
use Swoole\Process;
// 主进程创建 3 个子进程
for ($n = 1; $n <= 3; $n++) {
$process = new Process(function () use ($n) {
echo 'Child #' . getmypid() . " start and sleep {$n}s" . PHP_EOL;
sleep($n);
echo 'Child #' . getmypid() . ' exit' . PHP_EOL;
});
$process->start();
}
// 主进程用 wait 回收子进程
for ($n = 3; $n--;) {
$status = Process::wait(true);
echo "Recycled #{$status['pid']}, code={$status['code']}, signal={$status['signal']}" . PHP_EOL;
}
echo 'Parent #' . getmypid() . ' exit' . PHP_EOL;
Swoole 进程管理模块 Process 之单进程的使用的更多相关文章
- Swoole 进程管理
用法: $process = new swoole_process(function(){ //这里写业务代码 },true) //开启进程,返回进程pid $pid = $process->s ...
- Node.js进程管理之Process模块
在前面Node.js事件运行机制也有提到,Node.js应用在单个线程运行,但是现在大部分服务器都是多处理器,为了方便使用多个进程,Node.js提供了3个模块.Process模块提供了访问正在运行的 ...
- Swoole 源码分析——进程管理 Swoole_Process
前言 swoole-1.7.2 增加了一个进程管理模块,用来替代 PHP 的 pcntl 扩展. PHP自带的pcntl,存在很多不足,如 pcntl 没有提供进程间通信的功能 pcntl 不支持重定 ...
- swoole深入学习 4. process
swoole-1.7.2增加了一个进程管理模块,用来替代PHP的pcntl扩展.pcntl是php新增的一个多进程扩展,用来实现多进程,但是有很多不完善的地方,swoole 就完善了这些地方,而且使得 ...
- boost:进程管理
概述 Boost.Process提供了一个灵活的C++ 进程管理框架.它允许C++ developer可以像Java和.Net程序developer那样管理进程.它还提供了管理当前执行进程上下文.创建 ...
- Android内存进程管理机制
参考文章: http://www.apkbus.com/android-104940-1-1.htmlhttp://blog.sina.com.cn/s/blog_3e3fcadd0100yjo2.h ...
- Python::OS 模块 -- 进程管理
os模块的简介参看 Python::OS 模块 -- 简介 os模块的文件相关操作参看 Python::OS 模块 -- 文件和目录操作 os模块的进程参数 Python::OS 模块 -- 进程参数 ...
- 在Python程序中的进程操作,multiprocess.Process模块
在python程序中的进程操作 之前我们已经了解了很多进程相关的理论知识,了解进程是什么应该不再困难了,刚刚我们已经了解了,运行中的程序就是一个进程.所有的进程都是通过它的父进程来创建的.因此,运行起 ...
- python 全栈开发,Day38(在python程序中的进程操作,multiprocess.Process模块)
昨日内容回顾 操作系统纸带打孔计算机批处理 —— 磁带 联机 脱机多道操作系统 —— 极大的提高了CPU的利用率 在计算机中 可以有超过一个进程 进程遇到IO的时候 切换给另外的进程使用CPU 数据隔 ...
随机推荐
- Xcode中匹配的配置包的存放目录
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/DeviceSupport
- mybatis错误 Mapped Statements collection does not contain value for
java.lang.IllegalArgumentException: Mapped Statements collection does not contain value for 在unit里测试 ...
- Redis-5种基础数据结构
Redis基础数据结构 知识整理源于<Redis深度历险 核心原理与应用实践>这本书 Redis 有的数据结构都以 唯一的 key 字符串作为名称,然后通过这个唯一 key 值来获取相应的 ...
- 使用JDBCTemplate执行DQL/DML语句
package cn.itcast.datasource.jdbctemplate;import cn.itcast.domain.User;import cn.itcast.utils.JDBCUt ...
- Docker从入门到精通(五)——Dockerfile
Dockerfile 简单来说就是一个包含用于组合镜像的命令的文本文档,Docker 通过读取 Dockerfile 中的指令就可以按步骤生成镜像,那么在制作镜像之前,我们先了解一下镜像的原理. 1. ...
- idea秘钥集成docker
目录 docker开启远程访问 docker安全远程访问 服务端 客户端 修改权限 修改docker配置 IDEA集成docker部署项目 1. 新建DockerFile,配置启动服务 2. Dock ...
- PowerDotNet平台化软件架构设计与实现系列(07):数据同步平台
上文介绍定时任务调度平台的时候提到,定时任务调度平台的类模式一般用于处理耗时较长的任务.但是根据经验,有些耗时较长的任务,可以通过简化业务逻辑.分页.批量多次处理,改造为耗时较小的适合使用RESTfu ...
- NOAA数据下载方法
NOAA OneStop https://data.noaa.gov/onestop/about NOAA 数据搜索平台,在一个地方同时搜索NOAA的 Geophysical, oceans, coa ...
- LuoguP7478 【A】StickSuger 题解
Content 给定一个长度为 \(n\) 的仅包含小写字母的字符串 \(s\),请找到一个二元组 \((i,j)\)(\(i<j\))使得在交换字符串 \(s\) 的第 \(i\) 个和第 \ ...
- 如何把Electron做成一个Runtime,让多个应用共享同一个Electron
这个问题涉及到很多知识,而且要想把这个Runtime做好很绕. 下面我就说一下我的思路:(以下内容以Windows平台为基础,Mac平台和Linux平台还得去调查一下,才能确定是否可行) 首先,我们先 ...