分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 运营维护

PHP协程:并发 shell_exec

发布时间:2023-09-06 02:26责任编辑:顾先生关键词:PHPshell

在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

PHP协程:并发 shell_exec

原文地址:https://www.cnblogs.com/lovellll/p/10113283.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved