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

                ??一站式輕松地調用各大LLM模型接口,支持GPT4、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                # 協程執行流程 [TOC] 協程執行流程遵循以下原則: * 協程沒有`IO`等待 正常執行PHP代碼,不會產生執行流程切換 * 協程遇到`IO`等待 立即將控制權切,待`IO`完成后,重新將執行流切回原來協程切出的點 * 協程并行協程依次執行,同上一個邏輯 * 協程嵌套執行流程由外向內逐層進入,直到發生`IO`,然后切到外層協程,父協程不會等待子協程結束 ## 無`IO`等待 * 正常執行`PHP`代碼,不會產生執行流程切換 > 無`IO`操作的協程,相當于一次`PHP`函數調用 ~~~ echo "main start\n"; go(function () { echo "coro ".co::getcid()." start\n"; }); echo "end\n"; /* main start coro 1 start end */ ~~~ ## `IO`等待 * 立即將控制權切,待`IO`完成后,重新將執行流切回原來協程切出的點 ~~~ echo "main start\n"; go(function () { echo "coro ".co::getcid()." start\n"; co::sleep(.1); //switch at this point echo "coro ".co::getcid()." end\n"; }); echo "end\n"; /* main start coro 1 start end coro 1 end */ ~~~ ## 協程并行 協程依次執行,同上一個邏輯 ~~~ echo "main start\n"; go(function () { echo "coro ".co::getcid()." start\n"; co::sleep(.1); echo "coro ".co::getcid()." end\n"; }); echo "main flag\n"; go(function () { echo "coro ".co::getcid()." start\n"; co::sleep(.1); echo "coro ".co::getcid()." end\n"; }); echo "end\n"; /* main start coro 1 start main flag coro 2 start end coro 1 end coro 2 end */ ~~~ ## 協程嵌套 執行流程由外向內逐層進入,直到發生IO,然后切到外層協程,父協程不會等待子協程結束 ~~~ echo "main start\n"; go(function () { echo "coro ".co::getcid()." start\n"; go(function () { echo "coro ".co::getcid()." start\n"; co::sleep(.1); echo "coro ".co::getcid()." end\n"; }); echo "coro ".co::getcid()." do not wait children coroutine\n"; co::sleep(.2); echo "coro ".co::getcid()." end\n"; }); echo "end\n"; /* main start coro 1 start coro 2 start coro 1 do not wait children coroutine end coro 2 end coro 1 end */ ~~~ ~~~ echo "main start\n"; go(function () { echo "coro ".co::getcid()." start\n"; go(function () { echo "coro ".co::getcid()." start\n"; co::sleep(.2); echo "coro ".co::getcid()." end\n"; }); echo "coro ".co::getcid()." do not wait children coroutine\n"; co::sleep(.1); echo "coro ".co::getcid()." end\n"; }); echo "end\n"; /* main start coro 1 start coro 2 start coro 1 do not wait children coroutine end coro 1 end coro 2 end */ ~~~
                  <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>

                              哎呀哎呀视频在线观看