<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                # Process swoole-1.7.2增加了一個進程管理模塊,用來替代PHP的pcntl擴展。 需要注意Process進程在系統是非常昂貴的資源,創建進程消耗很大。另外創建的進程過多會導致進程切換開銷大幅上升。可以使用`vmstat`指令查看操作系統每秒進程切換的次數。 ```shell vmstat 1 1000 procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu----- r b swpd free buff cache si so bi bo in cs us sy id wa st 0 0 0 8250028 509872 4061168 0 0 10 13 88 86 1 0 99 0 0 0 0 0 8249532 509872 4061936 0 0 0 0 451 1108 0 0 100 0 0 0 0 0 8249532 509872 4061884 0 0 0 0 684 1855 1 3 95 0 0 0 0 0 8249532 509880 4061876 0 0 0 16 492 1332 0 0 99 0 0 0 0 0 8249532 509880 4061844 0 0 0 0 379 893 0 0 100 0 0 0 0 0 8249532 509880 4061844 0 0 0 0 440 1116 0 0 99 0 0 ``` PHP自帶的pcntl,存在很多不足,如 ---- * pcntl沒有提供進程間通信的功能 * pcntl不支持重定向標準輸入和輸出 * pcntl只提供了fork這樣原始的接口,容易使用錯誤 * swoole_process提供了比pcntl更強大的功能,更易用的API,使PHP在多進程編程方面更加輕松。 swoole_process提供了如下特性: ---- * swoole_process提供了基于unixsock的進程間通信,使用很簡單只需調用write/read或者push/pop即可 * swoole_process支持重定向標準輸入和輸出,在子進程內echo不會打印屏幕,而是寫入管道,讀鍵盤輸入可以重定向為管道讀取數據 * 配合swoole_event模塊,創建的PHP子進程可以異步的事件驅動模式 * swoole_process提供了exec接口,創建的進程可以執行其他程序,與原PHP父進程之間可以方便的通信 一個同步實例: ---- * 子進程異常退出時,自動重啟 * 主進程異常退出時,子進程在干完手頭活后退出 ```php (new class{ public $mpid=0; public $works=[]; public $max_precess=1; public $new_index=0; public function __construct(){ try { swoole_set_process_name(sprintf('php-ps:%s', 'master')); $this->mpid = posix_getpid(); $this->run(); $this->processWait(); }catch (\Exception $e){ die('ALL ERROR: '.$e->getMessage()); } } public function run(){ for ($i=0; $i < $this->max_precess; $i++) { $this->CreateProcess(); } } public function CreateProcess($index=null){ $process = new swoole_process(function(swoole_process $worker)use($index){ if(is_null($index)){ $index=$this->new_index; $this->new_index++; } swoole_set_process_name(sprintf('php-ps:%s',$index)); for ($j = 0; $j < 16000; $j++) { $this->checkMpid($worker); echo "msg: {$j}\n"; sleep(1); } }, false, false); $pid=$process->start(); $this->works[$index]=$pid; return $pid; } public function checkMpid(&$worker){ if(!swoole_process::kill($this->mpid,0)){ $worker->exit(); // 這句提示,實際是看不到的.需要寫到日志中 echo "Master process exited, I [{$worker['pid']}] also quit\n"; } } public function rebootProcess($ret){ $pid=$ret['pid']; $index=array_search($pid, $this->works); if($index!==false){ $index=intval($index); $new_pid=$this->CreateProcess($index); echo "rebootProcess: {$index}={$new_pid} Done\n"; return; } throw new \Exception('rebootProcess Error: no pid'); } public function processWait(){ while(1) { if(count($this->works)){ $ret = swoole_process::wait(); if ($ret) { $this->rebootProcess($ret); } }else{ break; } } } }); ```
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看