<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>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                # Process->useQueue [TOC] 啟用消息隊列作為進程間通信。 ~~~ bool swoole_process->useQueue(int $msgkey = 0, int $mode = 2); ~~~ useQueue方法接受2個可選參數。 * `$msgkey`是消息隊列的key,默認會使用`ftok(__FILE__, 1)`作為KEY * `$mode`通信模式,默認為`2`,表示爭搶模式,所有創建的子進程都會從隊列中取數據 * 如果創建消息隊列失敗,會返回`false`。可使用`swoole_strerror(swoole_errno())`得到錯誤碼和錯誤信息。 > 使用模式`2`后,創建的子進程無法進行單獨通信,比如發給特定子進程。 > `$process`對象并未執行`start`,也可以執行`push`/`pop`向隊列推送/提取數據 > 消息隊列通信方式與管道不可共用。消息隊列不支持`EventLoop`,使用消息隊列后只能使用同步阻塞模式 ~~~ CygWin 環境不支持消息隊列,請勿在此環境下使用 ~~~ ## 非阻塞 在`1.9.2`或更高版本中增加了`swoole_process::IPC_NOWAIT`的支持,可將隊列設置為非阻塞。在非阻塞模式下,隊列已滿調用`push`方法、隊列已空調用`pop`方法時將不再阻塞立即返回。 ~~~ //設置為非阻塞模式 $process->useQueue($key, $mode | swoole_process::IPC_NOWAIT); ~~~ 示例 ~~~ <?php $worker_num = 2; $process_pool = []; $process= null; $pid = posix_getpid(); function sub_process(swoole_process $worker) { sleep(1); //防止父進程還未往消息隊列中加入內容直接退出 echo "worker ".$worker->pid." started".PHP_EOL; while($msg = $worker->pop()){ if ($msg === false) { break; } $sub_pid = $worker->pid; echo "[$sub_pid] msg : $msg".PHP_EOL; sleep(1);//這里的sleep模擬任務耗時,否則可能1個worker就把所有信息全接受了 } echo "worker ".$worker->pid." exit".PHP_EOL; $worker->exit(0); } $customMsgKey = 1; $mod = 2 | swoole_process::IPC_NOWAIT;//這里設置消息隊列為非阻塞模式 //創建worker進程 for($i=0;$i<$worker_num; $i++) { $process=new swoole_process('sub_process'); $process->useQueue($customMsgKey, $mod); $process->start(); $pid = $process->pid; $process_pool[$pid] = $process; } $messages = [ "Hello World!", "Hello Cat!", "Hello King", "Hello Leon", "Hello Rose" ]; //由于所有進程是共享使用一個消息隊列,所以只需向一個子進程發送消息即可 $process = current($process_pool); foreach ($messages as $msg) { $process->push($msg); } swoole_process::wait(); swoole_process::wait(); echo "master exit".PHP_EOL; ~~~
                  <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>

                              哎呀哎呀视频在线观看