<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之旅 廣告
                # Coroutine\Channel::select 廢棄 ---- ``` 此方法存在安全問題,已廢棄 ``` 通道讀寫檢測。類似于`socket_select`和`stream_select`可以檢測`channel`是否可進行讀寫。 原型 ---- ```php function Coroutine\Channel::select(array &$read, array &$write, float $timeout = 0); ``` 當`$read`或`$write`數組中有部分`channel`對象處于可讀或可寫狀態,`select`會立即返回,不會產生協程調度。當數組中沒有任何`channel`可讀或可寫時,將掛起當前協程,并設置定時器。當其中一個通道可讀或可寫時,將重新喚醒當前協程。 `select`操作只檢測`channel`列表的可讀或可寫狀態,但并不會讀寫`channel`,在`select`調用返回后,可遍歷`$read`和`$write`數組,執行`pop`和`push`方法,完成通道讀寫操作。 參數 ---- * `$read` 數組引用類型,元素為`channel`對象,讀操作檢測,可以為`null` * `$write` 數組引用類型,元素為`channel`對象,寫操作檢測,可以為`null` * `$timeout` 浮點型,超時設置,單位為秒,最小粒度為`0.001`秒,即`1ms`。默認為`0`,表示永不超時。 返回值 ---- * 成功返回`true`,底層會修改`$read`、`$write`數組,`$read`和`$write`中的元素,即是可讀或可寫的`channel` * 超時或傳入的參數錯誤,如`$read`和`$write`中有非`channel`對象,底層返回`false` 注意事項 ---- 早期版本中`Coroutine\Channel`由于存在一些問題,在`Swoole4.0.3`版本重構并廢棄了 `Coroutine\Channel::select` 方法。所以在`Swoole4.0.3`以上的版本請使用`channel->pop($timeout)`替代。 fibonacci 實例 ---- ```php $c1 = new chan(); $c2 = new chan(); function fibonacci($c1, $c2) { go(function () use ($c1, $c2) { $a = 0; $b = 1; while(1) { $read_list = [$c2]; $write_list = [$c1]; $result = chan::select($read_list, $write_list, 2); if ($write_list) { $t = $a + $b; $a = $b; $b = $t; $c1->push($a); } if ($read_list) { $ret = $c2->pop(); if ($ret === 1) { return 1; } } } }); } $num = 10; go(function () use ($c1, $c2, $num) { for ($i = 0; $i < $num; $i ++) { $ret = $c1->pop(); echo "fibonacci @$i $ret\n"; } $c2->push(1); }); fibonacci($c1, $c2); ```
                  <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>

                              哎呀哎呀视频在线观看