首页 > 系统服务 > 详细

Swoole的多进程模块

时间:2020-02-02 14:26:42      阅读:69      评论:0      收藏:0      [点我收藏+]

介绍

Swoole是有自己的一个进程管理模块,用来替代PHP的pcntl扩展,需要注意Process进程在系统是非常昂贵的资源,创建进程消耗很大,另外创建的进程过多会导致进程切换开销大幅上升

为什么不使用pcntl

  1. pcntl没有提供进程间通信的功能
  2. pcntl不支持重定向标准输入和输出
  3. pcntl只提供了fork这样原始的接口,容易使用错误

Swoole是怎么解决的

    1. swoole_process提供了基于unixsock的进程间通信,使用很简单只需调用write/read或者push/pop即可
    2. swoole_process支持重定向标准输入和输出,在子进程内echo不会打印屏幕,而是写入管道,读键盘输入可以重定向为管道读取数据
    3. swoole_process提供了exec接口,创建的进程可以执行其他程序,与原PHP父进程之间可以方便的通信

创建进程

Swoole\Process::__construct(callable $function, $redirect_stdin_stdout = false, $create_pipe = true)

  $function,子进程创建成功后要执行的函数,底层会自动将函数保存到对象的callback属性上。如果希望更改执行的函数,可赋值新的函数到对象的callback属性

  $redirect_stdin_stdout,重定向子进程的标准输入和输出。启用此选项后,在子进程内输出内容将不是打印屏幕,而是写入到主进程管道。读取键盘输入将变为从管道中读取数据。默认为阻塞读取。

  $create_pipe,是否创建管道,启用$redirect_stdin_stdout后,此选项将忽略用户参数,强制为true。如果子进程内没有进程间通信,可以设置为 false。

<?php
for ($i = 0; $i < 6; $i++) {#创建了3个子进程
    $process = new Swoole\Process(function ($process) {
        echo PHP_EOL . posix_getpid() . PHP_EOL;
    }, false, false);
    $process->start();
}
?>

 技术分享图片

 

Swoole的多进程模块

原文:https://www.cnblogs.com/zh718594493/p/12251630.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!