php swoole多进程/多线程用法示例【基于php7nts版】


Posted in PHP onAugust 12, 2019

本文实例讲述了php swoole多进程/多线程用法。分享给大家供大家参考,具体如下:

swoole的多线程其实就是多进程,进程创建太多切换的开销很大,如果能用上pthreads建议用pthreads,因为我用的是php7nts版本没办法用pthreads

swoole实例如下:

<?php
/**
 * 创建多进程
 */
$worker_num     = 6;    // 默认进程数
$workers       = [];    // 进程保存
$redirect_stdout  = false;  // 重定向输出 ; 这个参数用途等会我们看效果
for($i = 0; $i < $worker_num; $i++){
  $process = new swoole_process('callback_function', $redirect_stdout);
  // 启用消息队列 int $msgkey = 0, int $mode = 2
  $process->useQueue(0, 2);
  $pid = $process->start();
  // 管道写入内容
  $process->write('index:'.$i);
  $process->push('进程的消息队列内容');
  // 将每一个进程的句柄存起来
  $workers[$pid] = $process;
}
/**
 * 子进程回调
 * @param swoole_process $worker [description]
 * @return [type]         [description]
 */
function callback_function(swoole_process $worker)
{
  $recv = $worker->pop();
  echo "子输出主内容: {$recv}".PHP_EOL;
  //get guandao content
  $recv = $worker->read();
  $result = doTask();
  echo PHP_EOL.$result.'==='.$worker->pid.'==='.$recv;
  $worker->exit(0);
}
/**
 * 监控/回收子进程
 */
while(1){
  $ret = swoole_process::wait();
  if ($ret){// $ret 是个数组 code是进程退出状态码,
    $pid = $ret['pid'];
    echo PHP_EOL."Worker Exit, PID=" . $pid . PHP_EOL;
  }else{
    break;
  }
}
/**
 * doTask
 * @return [type] [description]
 */
function doTask()
{
  sleep(2);
  return true;
}

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
PHP的FTP学习(二)
Oct 09 PHP
我的论坛源代码(八)
Oct 09 PHP
php环境配置之CGI、FastCGI、PHP-CGI、PHP-FPM、Spawn-FCGI比较?
Oct 17 PHP
php中jpgraph类库的使用介绍
Aug 08 PHP
php广告加载类用法实例
Sep 23 PHP
Yii使用migrate命令执行sql语句的方法
Mar 15 PHP
thinkPHP5.0框架命名空间详解
Mar 18 PHP
PHP策略模式定义与用法示例
Jul 27 PHP
php 字符串中是否包含指定字符串的多种方法
Apr 12 PHP
PHP实现Huffman编码/解码的示例代码
Apr 20 PHP
PHP使用SOAP调用API操作示例
Dec 25 PHP
php连接sftp的作用以及实例代码
Sep 23 PHP
PHP基于swoole多进程操作示例
Aug 12 #PHP
PHP swoole和redis异步任务实现方法分析
Aug 12 #PHP
php使用pecl方式安装扩展操作示例
Aug 12 #PHP
PHP实现与java 通信的插件使用教程
Aug 11 #PHP
PHP利用DWZ.CN服务生成短网址
Aug 11 #PHP
thinkPHP和onethink微信支付插件分享
Aug 11 #PHP
PHP基于session.upload_progress 实现文件上传进度显示功能详解
Aug 09 #PHP
You might like
PHP入门速成(2)
2006/10/09 PHP
php实现有序数组打印或排序的方法【附Python、C及Go语言实现代码】
2016/11/10 PHP
PHP经典实用正则表达式小结
2017/05/04 PHP
php利用ffmpeg提取视频中音频与视频画面的方法详解
2017/06/07 PHP
Laravel 中使用 Vue.js 实现基于 Ajax 的表单提交错误验证操作
2017/06/30 PHP
JTrackBar水平拖动效果
2007/07/15 Javascript
js ondocumentready onmouseover onclick onmouseout 样式
2010/07/22 Javascript
js函数调用常用方法详解
2012/12/03 Javascript
js实现缓冲运动效果的方法
2015/04/10 Javascript
javascript 判断两个日期之差的示例代码
2015/09/05 Javascript
JavaScript简单下拉菜单实例代码
2015/09/07 Javascript
javascript实现网页中涉及的简易运动(改变宽高、透明度、位置)
2015/11/29 Javascript
学习使用AngularJS文件上传控件
2016/02/16 Javascript
通过js修改input、select默认字体颜色
2017/04/19 Javascript
jQuery Ajax自定义分页组件(jquery.loehpagerv1.0)实例详解
2017/05/01 jQuery
关于webpack代码拆分的解析
2017/07/20 Javascript
vue利用better-scroll实现轮播图与页面滚动详解
2017/10/20 Javascript
JQuery实现ajax请求的示例和注意事项
2018/12/10 jQuery
vue踩坑记-在项目中安装依赖模块npm install报错
2019/04/02 Javascript
js实现跟随鼠标移动的小球
2019/08/26 Javascript
Vue实现兄弟组件间的联动效果
2020/01/21 Javascript
[03:03]2014DOTA2西雅图国际邀请赛 Alliance战队巡礼
2014/07/07 DOTA
python3.3教程之模拟百度登陆代码分享
2014/01/16 Python
Python设计模式之命令模式简单示例
2018/01/10 Python
Python对切片命名的实现方法
2018/10/16 Python
Python 使用type来定义类的实现
2019/11/19 Python
Django实现后台上传并显示图片功能
2020/05/29 Python
Python 实现 T00ls 自动签到脚本代码(邮件+钉钉通知)
2020/07/06 Python
opencv 形态学变换(开运算,闭运算,梯度运算)
2020/07/07 Python
解决Python paramiko 模块远程执行ssh 命令 nohup 不生效的问题
2020/07/14 Python
python中Array和DataFrame相互转换的实例讲解
2021/02/03 Python
结合 CSS3 transition transform 实现简单的跑马灯效果的示例
2018/02/07 HTML / CSS
使用phonegap获取位置信息的实现方法
2017/03/31 HTML / CSS
制药工程专业职业生涯规划范文
2014/03/10 职场文书
九一八事变演讲稿
2014/09/05 职场文书
使用react-virtualized实现图片动态高度长列表的问题
2021/05/28 Javascript