• 即时通讯或者推送消息的守护进程?开启几个进程?


    进程根据状态可以分为三种进程,守护进程,僵尸进程,孤儿进程。今天我们着重来分析下守护进程。

    1.daemon?
    (1)概念

    守护进程 (daemon) 是一类在后台运行的特殊进程,用于执行特定的系统任务。很多守护进程在系统引导的时候启动,并且一直运行直到系统关闭。另一些只在需要的时候才启动,完成任务后就自动结束.

    (2)基本特点

    生存周期长[非必须],一般操作系统启动的时候就启动,关闭的时候关闭。

    守护进程和终端无关联,也就是他们没有控制终端,所以当控制终端退出,也不会导致守护进程退出。

    守护进程是在后台运行,不会占着终端,终端可以执行其他命令

    守护进程的父进程是1号进程,也就是init进程。

    (3)在Linux中 , 大概有三种方式实现脚本后台化 :

    PHP 编写守护进程 - 知乎 (zhihu.com)

    a:在命令后添加一个&符号 , 比如 php task.php & . 这个方法的缺点在于 如果terminal终端关闭 , 无论是正常关闭还是非正常关闭 , 这个php进程都会随着终端关闭而关闭 , 其次是代码中如果有echo或者print_r之类的输出文本 , 会被输出到当前的终端窗口中 .

    b:使用nohup命令 , 比如 nohup php task.php & . 默认情况下 , 代码中echo或者print_r之类输出的文本会被输出到php代码同级目录的nohup.out文件中 . 如果你用exit命令或者关闭按钮等正常手段关闭终端 , 该进程不会被关闭 , 依然会在后台持续运行 . 但是如果终端遇到异常退出或者终止 , 该php进程也会随即退出 . 本质上 , 也并非稳定可靠的daemon方案 .

    c:使用fork和setsid , 我暂且称之为 : *nix解决方案

    d:使用supervisor工具 (推荐此方案)

    e:systemd 

    (4)php代码实现

    PHP中实现守护进程的步骤是什么,如何编程-群英 (qycn.com)

    • 创建子进程,退出父进程
    • 子进程创建一个新的会话并成为 session leader
    • 重设文件掩码
    • 改变工作目录
    • 关闭标准输入输出
    1. 0) {
    2. exit(0);
    3. }
    4. / 以下是子进程 /
    5. // [3] 创建一个新的会话并成为 session leader
    6. if ( ($sid = posix_setsid()) <= 0 ) {
    7. die("set sid failed.\n");
    8. }
    9. // [4] 重设文件掩码
    10. umask(0);
    11. // [5] 改变工作目录
    12. if (chdir('/') === false) {
    13. die("chdir failed.\n");
    14. }
    15. // [6] 关闭标准输入输出
    16. fclose(stdin);
    17. fclose(stdout);
    18. fclose(stderr);
    19. }
    20. daemon();
    21. // ... 真正的处理逻辑
    2.开启多少进程

    Gateway进程数不是开得越多越好,Gateway进程增多会导致进程间通讯开销变大。

    每个Gateway进程可以轻松处理5000连接的请求转发,业务同时在线连接数少于5000时可以只开1-2个Gateway进程。1万同时在线可以开2-3个Gateway进程,每5000个连接增加一个Gateway进程,依次类推。

    BusinessWorker进程中根据业务是否有阻塞式IO设置进程数为CPU核数的1倍-4倍即可。 即start_businessworker.php$worker->count = cpu核数的1-4倍;

    进程数是由count属性决定的(windows系统不支持进程数设置),例如下面代码

    1. use Workerman\Worker;
    2. require_once __DIR__ . '/vendor/autoload.php';
    3. $http_worker = new Worker("http://0.0.0.0:2345");
    4. // ## 启动4个进程对外提供服务 ##
    5. $http_worker->count = 4;
    6. ...
  • 相关阅读:
    Grpc 通信模式
    【Vim】单行与多行缩进
    网络安全(黑客)—自学笔记
    10分钟做出领导满意的可视化大屏,这40套模板一定要收藏好
    @RequestBody注解转对象中驼峰格式的参数无法接收到数据的问题解决方法
    当客户说价格高时我会这样做
    一览8个 NFT 分析平台
    百度笔试题面试题总结1
    自媒体视频剪辑中的那些素材到哪里找?
    《MongoDB入门教程》第02篇 MongoDB安装
  • 原文地址:https://blog.csdn.net/smallmww/article/details/133937205