热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

关于php:Swoole-v47-版本新特性预览之-Process\Pooldetach

该模块的外围性能为过程治理,相比Process实现多过程,ProcessPool更加简略,封装档次更高,开发者无需编写过多代码即可实现过程治理性能,配合CoroutineServer能够创立纯协程格调的,能利用多核CPU的服务端程序。

Process\Pool 是 Swoole 提供的过程池,基于 Server 的 Manager 治理过程模块实现,可治理多个工作过程。

该模块的外围性能为过程治理,相比 Process 实现多过程,Process\Pool 更加简略,封装档次更高,开发者无需编写过多代码即可实现过程治理性能,配合 Coroutine\Server 能够创立纯协程格调的,能利用多核 CPU 的服务端程序。

在 4.7 版本中,对 Process\Pool 减少了一个 detach 办法,这个办法名看起来很眼生吧?

Http\Response 中也有一个 detach 办法,它的作用是拆散响应对象。应用此办法后,$response 对象销毁时不会主动 end,与 Http\Response::createServer->send 配合应用。

办法作用

那么Process\Pool::detach()的作用也就很显著了:

将过程池内以后 Worker 过程脱离治理,底层会立刻创立新的过程,老的过程不再解决数据,由应用层代码自行治理生命周期。

示例代码

上面来看一下示例代码:

use Swoole\Process;
use Swoole\Coroutine;

$pool = new Process\Pool(2);
$pool->set(['enable_coroutine' => true]);
$pool->on('WorkerStart', function (Process\Pool $pool, $workerId) {
    static $running = true;
    Process::signal(SIGTERM, function () use (&$running) {
        $running = false;
        echo "TERM\n";
    });
    echo("[Worker #{$workerId}] WorkerStart, pid: " . posix_getpid() . "\n");
    $i = 0;
    while ($running) {
        Coroutine::sleep(1);
        $i++;
        if ($i == 5) {
            $pool->detach();
        } elseif ($i == 10) {
            break;
        }
    }
});
$pool->on('WorkerStop', function (Process\Pool $pool, $workerId) {
    echo("[Worker #{$workerId}] WorkerStop, pid: " . posix_getpid() . "\n");
});
$pool->start();

WorkerStart 中通过 Process::signal 设置一个异步信号监听,能够通过发送 SIGTERM 信号来进行该服务。

服务运行中,当$i等于 5 时,让以后过程脱离治理;同时底层会创立新的过程来维持worker_num数量;当$i等于 10 时,完结该过程。

所以会失去以下输入:

[Worker #0] WorkerStart, pid: 75050
[Worker #1] WorkerStart, pid: 75051
[Worker #0] WorkerStart, pid: 75054
[Worker #1] WorkerStart, pid: 75055
[Worker #0] WorkerStop, pid: 75050
[Worker #1] WorkerStop, pid: 75051
[Worker #1] WorkerStart, pid: 75056
[Worker #0] WorkerStart, pid: 75057

在以上代码中相当于保护了 4 个过程,在一次退出后又会从新拉起两个新的过程,如是往返。

在应用时就须要特地留神逻辑问题,否则可能会导致有限创立新的过程。


推荐阅读
  • PHP 的 Web 運行原理 ( 4 ) - Reactor 的實現之 Swoole
    本篇文章,咱們將要在說明另一個在php實現reactor模式的東西本篇文章分為以下幾個章節:swoole官網寫到: ... [详细]
  • GetWindowLong函数
    今天在看一个代码里头写了GetWindowLong(hwnd,0),我当时就有点费解,靠,上网搜索函数原型说明,死活找不到第 ... [详细]
  • 本文分享了一个关于在C#中使用异步代码的问题,作者在控制台中运行时代码正常工作,但在Windows窗体中却无法正常工作。作者尝试搜索局域网上的主机,但在窗体中计数器没有减少。文章提供了相关的代码和解决思路。 ... [详细]
  • Java序列化对象传给PHP的方法及原理解析
    本文介绍了Java序列化对象传给PHP的方法及原理,包括Java对象传递的方式、序列化的方式、PHP中的序列化用法介绍、Java是否能反序列化PHP的数据、Java序列化的原理以及解决Java序列化中的问题。同时还解释了序列化的概念和作用,以及代码执行序列化所需要的权限。最后指出,序列化会将对象实例的所有字段都进行序列化,使得数据能够被表示为实例的序列化数据,但只有能够解释该格式的代码才能够确定数据的内容。 ... [详细]
  • Voicewo在线语音识别转换jQuery插件的特点和示例
    本文介绍了一款名为Voicewo的在线语音识别转换jQuery插件,该插件具有快速、架构、风格、扩展和兼容等特点,适合在互联网应用中使用。同时还提供了一个快速示例供开发人员参考。 ... [详细]
  • PHP中的单例模式与静态变量的区别及使用方法
    本文介绍了PHP中的单例模式与静态变量的区别及使用方法。在PHP中,静态变量的存活周期仅仅是每次PHP的会话周期,与Java、C++不同。静态变量在PHP中的作用域仅限于当前文件内,在函数或类中可以传递变量。本文还通过示例代码解释了静态变量在函数和类中的使用方法,并说明了静态变量的生命周期与结构体的生命周期相关联。同时,本文还介绍了静态变量在类中的使用方法,并通过示例代码展示了如何在类中使用静态变量。 ... [详细]
  • 本文介绍了南邮ctf-web的writeup,包括签到题和md5 collision。在CTF比赛和渗透测试中,可以通过查看源代码、代码注释、页面隐藏元素、超链接和HTTP响应头部来寻找flag或提示信息。利用PHP弱类型,可以发现md5('QNKCDZO')='0e830400451993494058024219903391'和md5('240610708')='0e462097431906509019562988736854'。 ... [详细]
  • 在Xamarin XAML语言中如何在页面级别构建ControlTemplate控件模板
    本文介绍了在Xamarin XAML语言中如何在页面级别构建ControlTemplate控件模板的方法和步骤,包括将ResourceDictionary添加到页面中以及在ResourceDictionary中实现模板的构建。通过本文的阅读,读者可以了解到在Xamarin XAML语言中构建控件模板的具体操作步骤和语法形式。 ... [详细]
  • 本文介绍了Python爬虫技术基础篇面向对象高级编程(中)中的多重继承概念。通过继承,子类可以扩展父类的功能。文章以动物类层次的设计为例,讨论了按照不同分类方式设计类层次的复杂性和多重继承的优势。最后给出了哺乳动物和鸟类的设计示例,以及能跑、能飞、宠物类和非宠物类的增加对类数量的影响。 ... [详细]
  • 本文介绍了RxJava在Android开发中的广泛应用以及其在事件总线(Event Bus)实现中的使用方法。RxJava是一种基于观察者模式的异步java库,可以提高开发效率、降低维护成本。通过RxJava,开发者可以实现事件的异步处理和链式操作。对于已经具备RxJava基础的开发者来说,本文将详细介绍如何利用RxJava实现事件总线,并提供了使用建议。 ... [详细]
  • 如何实现JDK版本的切换功能,解决开发环境冲突问题
    本文介绍了在开发过程中遇到JDK版本冲突的情况,以及如何通过修改环境变量实现JDK版本的切换功能,解决开发环境冲突的问题。通过合理的切换环境,可以更好地进行项目开发。同时,提醒读者注意不仅限于1.7和1.8版本的转换,还要适应不同项目和个人开发习惯的需求。 ... [详细]
  • Swoole在PHP-fpmapache中如何使用task功能?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人 ... [详细]
  • php在哪里好找工作(php学到什么程度可以找到工作)
    导读:本篇文章编程笔记来给大家介绍有关php在哪里好找工作的相关内容,希望对大家有所帮助,一起来看看吧。本文目录一览:1、php去哪个城 ... [详细]
  • 使用版本:1.8.0及以上使用条件:1.开启async-redisphp--riswoole(如果没有开启,重新编译安 ... [详细]
  • php技术不好干什么工作(2023年最新分享)
    导读:很多朋友问到关于php技术不好干什么工作的相关问题,本文编程笔记就来为大家做个详细解答,供大家参考,希望对大家有所帮助!一起来看看吧!本文目录一览: ... [详细]
author-avatar
全程解密_785
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有