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

                企業??AI智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                ## Coroutine\\Channel 通道,類似于`go`語言的`chan`,支持多生產者協程和多消費者協程。底層自動實現了協程的切換和調度。 通道與`PHP`的`Array`類似,僅占用內存,沒有其他額外的資源申請,所有操作均為內存操作,無`IO`消耗。 <br> ## 方法 * `Channel->push`:當隊列中有其他協程正在等待`pop`數據時,自動按順序喚醒一個消費者協程。當隊列已滿時自動`yield`讓出控制器,等待其他協程消費數據 * `Channel->pop`:當隊列為空時自動`yield`,等待其他協程生產數據。消費數據后,隊列可寫入新的數據,自動按順序喚醒一個生產者協程。 > Coroutine\Channel使用本地內存,不同的進程之間內存是隔離的。只能在同一進程的不同協程內進行`push`和`pop`操作 > Coroutine\Channel在2.0.13或更高版本可用 <br> ## 屬性 * `$capacity`通道緩沖區容量 * `$errCode`channel錯誤碼 <br> ## 示例 ~~~ use Swoole\Coroutine as co; $chan = new co\Channel(1); co::create(function () use ($chan) { for($i = 0; $i < 100000; $i++) { co::sleep(1.0); $chan->push(['rand' => rand(1000, 9999), 'index' => $i]); echo "$i\n"; } }); co::create(function () use ($chan) { while(1) { $data = $chan->pop(); var_dump($data); } }); swoole_event::wait(); ~~~ <br> 使用`Chan`可以方便得實現連接池功能。管理各類`Socket`連接資源。 ## 連接池 ~~~ class RedisPool { /** * @var \Swoole\Coroutine\Channel */ protected $pool; /** * RedisPool constructor. * @param int $size 連接池的尺寸 */ function __construct($size = 100) { $this->pool = new Swoole\Coroutine\Channel($size); for ($i = 0; $i < $size; $i++) { $redis = new Swoole\Coroutine\Redis(); $res = $redis->connect('127.0.0.1', 6379); if ($res == false) { throw new RuntimeException("failed to connect redis server."); } else { $this->put($redis); } } } function put($redis) { $this->pool->push($redis); } function get() { return $this->pool->pop(); } } ~~~
                  <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>

                              哎呀哎呀视频在线观看