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

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                # Coroutine\Channel 通道,類似于`go`語言的`chan`,支持多生產者協程和多消費者協程。底層自動實現了協程的切換和調度。 * `Channel->push` :當隊列中有其他協程正在等待`pop`數據時,自動按順序喚醒一個消費者協程。當隊列已滿時自動`yield`讓出控制器,等待其他協程消費數據 * `Channel->pop`:當隊列為空時自動`yield`,等待其他協程生產數據。消費數據后,隊列可寫入新的數據,自動按順序喚醒一個生產者協程。 > `Coroutine\Channel`使用本地內存,不同的進程之間內存是隔離的。只能在同一進程的不同協程內進行`push`和`pop`操作 > `Coroutine\Channel`在`2.0.13`或更高版本可用 屬性 ---- * `$capacity` 通道緩沖區容量 * `$errCode` channel錯誤碼 示例 ---- ```php 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(); ``` 連接池 ---- 使用`Chan`可以方便第實現連接池功能。管理各類`Socket`連接資源。 ```php 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>

                              哎呀哎呀视频在线观看