热门标签 | 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 个过程,在一次退出后又会从新拉起两个新的过程,如是往返。

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


推荐阅读
  • 本文介绍了如何计算给定数组中所有非质数元素的总和,并提供了多种编程语言的实现示例。 ... [详细]
  • Spring Boot 入门指南
    本文介绍了Spring Boot的基本概念及其在现代Java应用程序开发中的作用。Spring Boot旨在简化Spring应用的初始设置和开发过程,通过自动配置和约定优于配置的原则,帮助开发者快速构建基于Spring框架的应用。 ... [详细]
  • 本文将详细介绍NSRunLoop的工作原理,包括其基本概念、消息类型(事件源)、运行模式、生命周期管理以及嵌套运行等关键知识点,帮助开发者更好地理解和应用这一重要技术。 ... [详细]
  • 本文档提供了一个详细的步骤指南,介绍如何使用Rviz工具将ROS bag文件中存储的点云数据进行可视化处理。 ... [详细]
  •  在使用PHP多年之后,我对PHP的优势和劣势已经非常清楚,与后起之秀Golang相比,两者已经不在一个重量级。 PHP更像是70kg级别的选手,脚本语言,极速开发,部署方便,性能 ... [详细]
  • php怎么做rpc通信(RPC通信)
    导读:很多朋友问到关于php怎么做rpc通信的相关问题,本文编程笔记就来为大家做个详细解答,供大家参考,希望对大家有所帮助!一起来看看吧!本文目录一览: ... [详细]
  • 【宇润日常疯测007】Swoole 协程与传统 fpm 同步模式比较
    为什么80%的码农都做不了架构师?如果说数组是PHP的精髓,数组玩得不6的,根本不能算是会用PHP。那协程对于Swoole也是同理& ... [详细]
  • 探索Squid反向代理中的远程代码执行漏洞
    本文深入探讨了在网站渗透测试过程中发现的Squid反向代理系统中存在的远程代码执行漏洞,旨在帮助网站管理者和开发者了解此类漏洞的危害及防范措施。 ... [详细]
  • 本文介绍了一个项目中如何在Windows平台上实现多声道音频数据的采集,特别是针对DANTE音频接口的8路立体声音频通道。文章详细描述了使用Windows底层音频API进行音频采集的方法,并提供了一个具体的实现示例。 ... [详细]
  • Webpack中实现环境与代码的有效分离
    本文探讨了如何在Webpack中有效地区分开发与生产环境,并实现代码的合理分离,以提高项目的可维护性和加载性能。 ... [详细]
  • 使用Swoole的时候出现以下问题,如何解决呢?不是太懂,希望高手们能帮帮忙!谢谢了!是运行https://github.com/matyhtf/webim里的开源项目:matyh ... [详细]
  • 前言昨天,在本地安装Swoole调试环境的时候,遇到好几个坑,因为我的电脑是Windows系统,所以安装的是c ... [详细]
  • Swoole是针对PHP的生产级异步编程框架。它是一种用纯C语言编写的PHP扩展,它使PHP开发人员能够在PHP中编写高性能,可扩展的并发TCP ... [详细]
  • 如何通过swoole加速laravel的问题?
    这篇文章主要介绍了关于如何使用swoole加速laravel,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下再来复习一下吧,导致php慢的各种因素中解析性语言的 ... [详细]
  • PHP语言之所以能有今天的地位,得益于PHP语言设计者一直遵从实用主义,将技术的复杂性隐藏在底层。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社区 版权所有