当前位置: 首页 > 编程日记 > 正文

PHP协程:并发 shell_exec

在PHP程序中经常需要用shell_exec执行一些命令,而普通的shell_exec是阻塞的,如果命令执行时间过长,那可能会导致进程完全卡住。
Swoole4协程环境下可以用Co::exec并发地执行很多命令。

本文基于Swoole-4.2.9PHP-7.2.9版本

协程示例

<?php
$c = 10;
while($c--) {go(function () {//这里使用 sleep 5 来模拟一个很长的命令co::exec("sleep 5");});
}

返回值

Co::exec执行完成后会恢复挂起的协程,并返回命令的输出和退出的状态码。

var_dump(co::exec("sleep 5"));

协程结果

```htf@htf-ThinkPad-T470p:~/workspace/debug$ time php t.php

real 0m5.089s
user 0m0.067s
sys 0m0.038s
htf@htf-ThinkPad-T470p:~/workspace/debug$


<p>只用了 <code>5秒</code>,程序就跑完了。</p>
<p>下面换成 PHP 的 shell_exec 来试试。</p>
<h2>阻塞代码</h2>

<?php
$c = 10;
while($c--) {
//这里使用 sleep 5 来模拟一个很长的命令
shell_exec("sleep 5");
}
```

使用nohup&转为后台执行,无法得到命令执行的结果和输出,本文不对此进行深度探讨

阻塞结果

```htf@htf-ThinkPad-T470p:~/workspace/debug$ time php s.php

real 0m50.119s
user 0m0.066s
sys 0m0.058s
htf@htf-ThinkPad-T470p:~/workspace/debug$
```

可以看到阻塞版本花费了50秒才完成。Swoole4提供的协程,是并发编程的利器。在工作中很多地方都可以使用协程,实现并发程序,大大提升程序性能。

原文地址:https://segmentfault.com/a/1190000017196514

转载于:https://www.cnblogs.com/lovellll/p/10113283.html

相关文章:

oralce 增加表字段命令|oralce 增加表字段类型命令

oralce 增加表字段命令 语法 alter table 表明 add 字段名 类型 alter table aqcuser add email varchar(36)转载于:https://www.cnblogs.com/bestsaler/archive/2010/09/08/1835430.html

mac 下周期调度命令或脚本

crontab 是在linux服务器上部署定时任务的方法0 5 * * * /usr/bin/python /data/www/tools/mysql_backup.pycmd之前有5个项目要填&#xff0c;分别对应分钟 小时 天 月 一周当中第几天( 0-6 ,0表示星期天)填写方法* 表示都满足&#xff0c;例如 * * * * * 表示每分钟执行一次&a…

JavaScript封装一个注册函数解决兼容问题

我们知道JavaScript注册(绑定)事件主要有两类方式&#xff0c;第一类传统方式具有注册事件的唯一性&#xff0c;即对于同一元素的同一事件&#xff0c;不会出现两个处理函数&#xff0c;如下 var btn document.querySelector(button);btn.onclick function(){document.body.s…

四种DCOM错误的区别,0x80080005 0x800706be 0x80010105 0x

四种DCOM错误的区别Differences between the following DCOM error0x800800050x800706be0x800101050x800706ba0x80080005:CO_E_Server_Exec_FailureServer execution failedIt is usually quite clear: COM (really, RPCSS) tried to launch a particular server process and e…

给django视图类添加装饰器

要将login_required装饰到view class的dispatch方法上&#xff0c; 因为dispatch方法为类方法&#xff0c;不是单个的函数&#xff0c;所以需要将装饰函数的装饰器 login_required转化为装饰类方法的装饰器&#xff0c;就要用到method_decorator . method_decorator的参数可以是…

JavaScript实现智能搜索框

应用场景&#xff1a; 1. 搜索框在页面中占据的空间过小&#xff0c;希望无论浏览到什么位置&#xff0c;可以轻易地回到并聚焦搜索框。 2. 搜索框里面的文字大小过小&#xff0c;希望能够在上方开辟一块空间放大内容 解决思路&#xff1a; 1. 对整个页面添加键盘事件keyup…

搜索引擎技术之概要预览

搜索引擎技术之概要预览前言近些天在学校静心复习功课与梳理思路&#xff08;找工作的事情暂缓&#xff09;&#xff0c;趁闲暇之际&#xff0c;常看有关搜索引擎相关技术类的文章&#xff0c;接触到不少此前未曾触碰到的诸多概念与技术&#xff0c;如爬虫&#xff0c;网页抓取…

Linux 守护进程,编写(转载)

设置守护进程过程&#xff1a;1.创建子进程&#xff0c;父进程退出2.在子进程中创建新会话3.改变当前目录为根目录4.重设文件权限掩码5.关闭文件描述符*6.守护进程里&#xff0c;忽略SIGCHLD信号 (即使fork两次&#xff0c;新进程由init接管&#xff0c;不进行signal(SIGCHLD,S…

RecycleView的notifyItemRemoved使用注意

转载请标明出处&#xff0c;维权必究&#xff1a;https://www.cnblogs.com/tangZH/p/10116095.html 我们为了移除RecycleView的某一项&#xff0c;会用RecycleView的notifyItemRemoved&#xff08;int position&#xff09;方法&#xff0c;但是需要注意的是&#xff1a;1、用该…

JavaScript实时更新中国标准时间

用到Date对象和BOM中的setInterval()定时器。 效果如下&#xff08;每隔1s刷新一次&#xff09; 代码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content&q…

【转】Flex4:利用HttpService与ASP.NET传输JSON数据(登录为例)

开发环境&#xff1a;Flash Builder4,Vs2005 1、首先打开FlashBuilde4,创建一个名为HttpService_Net_Json的flex项目 &#xff08;图1&#xff09; 然后下一步,应用程序类型选择web,应用程序服务器类型选择ASP.NET(如图2) &#xff08;图2&#xff09; 下一步&#xff0c;出现配…

使用Node.js写一个简单的api接口

引入Http模块 默认你已经安装了Node.js Node当中内置了Http模块&#xff1b; 可以使用 var http require("http"); 复制代码引入http模块&#xff1b; Hello world 用Node.js实现一个HTTP服务器程序非常简单。我们实现一个最简单的Web程序&#xff0c; 它对于所有请求…

body,td,th {

三、继承中容易引起的错误有时候继承也会带来些错误&#xff0c;比如说下面这条css定义&#xff1a; body{color:blue} 在有些浏览器中这句定义会使除表格之外的文本变成蓝色。从技术上来说&#xff0c;这是不正确的&#xff0c;但是它确实存在。所以我们经常需要借助于某些技巧…

JavaScript实现 按钮不可过频繁使用

主要用到setInterval和clearInterval方法和一个计时变量。 效果 代码 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta na…

二十分钟教你如何将区块链应用与函数计算相结合

前言 本篇文章适合对区块链应用感兴趣或是想要通过函数计算服务进一步开发区块链应用的新人。本文将结合阿里云区块链服务、阿里云函数计算服务、阿里云日志服务 以及社区应用 Marbles&#xff0c;手把手教大家如何将阿里云区块链服务与阿里云函数计算服务相结合&#xff0c;并…

【转】推荐!国外程序员整理的Java资源大全

构建 这里搜集了用来构建应用程序的工具。 Apache Maven&#xff1a;Maven使用声明进行构建并进行依赖管理&#xff0c;偏向于使用约定而不是配置进行构建。Maven优于Apache Ant。后者采用了一种过程化的方式进行配置&#xff0c;所以维护起来相当困难。Gradle&#xff1a;Grad…

科研成果汇总:收获的季节

感谢课题组各届成员(2006&#xff5e;2010级)长期不懈的努力与付出&#xff0c;特别感谢目前仍工作在第一线的各位成员的鼎力配合与协作&#xff0c;大家辛苦了&#xff01;同时&#xff0c;还要感谢研究所对我们组的大力支持与帮助&#xff01;谢谢大家&#xff01; BTW&#…

JavaScript 利用location对象实现跨页面传参

需求简述&#xff1a; 两个页面login.html和homepage.html&#xff0c;在login页输入用户名&#xff0c;点击登录会跳转到主页&#xff0c;主页拿到login页输入的用户名 实现思路&#xff1a; 1. 跳转&#xff1a;修改location.html 2. 拿参&#xff1a;处理location.searc…

编译u-boot时候,make distclean 出现rm:无法删除,****是一个目录

今天在编译u-boot的时候&#xff0c;make distclean&#xff0c;出现了rm:无法删除 "include/asm-arm/arch": 是一个目录。经过查看网友的解决办法&#xff0c;已经解决了。 具体解决办法&#xff1a;在uboot顶层有个mkconfig文件&#xff0c;vim打开后&#xff0c;在…

[转载]MaxtoCode对.Net程序加密的原理及解密探讨三(实例解密)

标 题: 【原创】MaxtoCode对.Net程序加密的原理及解密探讨三&#xff08;实例解密&#xff09;作 者: rick时 间: 2006-09-29,23:16:28链 接: http://bbs.pediy.com/showthread.php?t32658上一回我们试验了通过反射的方式获取method的源代码。这次我们就用一个实例来演示dump一…

MyEclipse教程:Web开发——创建Web片段项目

MyEclipse 在线订购年终抄底促销&#xff01;火爆开抢>>MyEclipse最新版下载本教程向用户展示了使用关联的Web项目创建Web片段项目的机制。 用户还可以获得要检查的示例项目。 在本教程中&#xff0c;用户将学习如何&#xff1a;创建Web片段和关联的Web项目部署并测试包含…

JavaScript 实现鼠标移动时实时获取其相对盒子的偏移

实现思路&#xff1a; 1. 获得盒子相对于页面的偏移量 div.offsetTop和div.offsetLeft 2. 获得鼠标相对于页面的偏移量 e.pageY和e.pageX 3. 前两者相减即可获得鼠标相对于盒子上沿和左侧的偏移 4. 使用鼠标移动事件 mousemove 实现效果&#xff1a; 代码 <!DOCTYPE h…

H.264 picture parameter sets成员值含义学习笔记

-picture parameter sets1. pic_parameter_set_idpic_parameter_set_id指明了在切片头中对应的某个psp.pic_parameter_set_id的值应该在0到255,包括0和2552. seq_parameter_set_idset_parameter_set_id表示激活的sps.seq_parameter_set_id应该取值在0到31之间,包括边界值.3. en…

软件开发进度管理

一、什么是软件项目管理  软件项目管理是按需求确定范围、按目标制定项目计划、按计划执行管理的过 程。对软件开发各阶段加强项目管理的根本目的在于增强对软件开发的控 制能力&#xff0c;提升软件开发的质量。软件项目的建设按软件工程的生命周期法可分为项目立项、启动、…

SQLServer之ISO游标使用

什么是游标 结果集&#xff0c;结果集就是select查询之后返回的所有行数据的集合。 游标则是处理结果集的一种机制吧&#xff0c;它可以定位到结果集中的某一行&#xff0c;多数据进行读写&#xff0c;也可以移动游标定位到你所需要的行中进行操作数据。 一般复杂的存储过程&am…

JavaScript实现鼠标拖拽登录框

拖拽的本质是登录框获得光标的偏移来调整自身的偏移。 拖拽发生时&#xff0c;光标相对盒子的坐标不会变化&#xff0c;相对于页面的坐标却在变化&#xff0c;二者的差值就是盒子需要的。 两个注意点&#xff1a; 1. 赋值给盒子的什么属性 outer.style.top e.pageY - y p…

c++ STL容器初探

什么是容器 首先&#xff0c;我们必须理解一下什么是容器&#xff0c;在C 中容器被定义为&#xff1a;在数据存储上&#xff0c;有一种对象类型&#xff0c;它可以持有其它对象或指向其它对像的指针&#xff0c;这种对象类型就叫做容器。很简单&#xff0c;容器就是保存其它对…

flutter开发中常用的dart插件

flutter插件官网地址&#xff1a;https://pub.dartlang.org/packages/ 1. image_picker 一个可以从图库选择图片&#xff0c;并可以用相机拍摄新照片的flutter插件 2. flutter_image 使用NetworkImageWithRetry 代替Image.network 加载网络图片可获得重试能力。 3. barcode_sca…

XML(eXtensible Markup Language)文件的解析

XML与HTML一样&#xff0c;文件中除了根节点以外&#xff0c;整个文件包含一个隐含根“/”,所以我们在解析文件同时一般采用XPath语法进行解析时&#xff0c;一般首先要以反“/”开始。 转载于:https://www.cnblogs.com/hibernate3-example/archive/2010/10/20/2492356.html

JavaScript 立即执行函数的两种写法

(function(str){console.log(str欢迎你~);})(行步至春深);(function(str) {console.log(str欢迎你~);}(行路易知难)); 可以看到&#xff0c;每种写法都比平常多出两个小括号&#xff0c;其中一个可以看作是调用&#xff0c;里面装参数&#xff0c;另一个可以看作防止语法错误。…