<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、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                ## 微服務工程結構 ![](https://img.kancloud.cn/31/25/3125af8a452346adccc37e04b6af7ebb_1485x650.png) ## 類調用關系 ![](https://img.kancloud.cn/51/6d/516df4af40dde819b5eb6c4f6b95d20d_1464x892.png) 接口層:定義 api 應用層:調用不同微服務域 領域層:微服務域,未來按照該域進行拆分 基礎層:基礎工具配置等 ## 部署 很長一段時間以來,瀏覽器對焦點和模糊事件的順序沒有達成一致,包括`focusin`,`focusout`,`focus`和`blur`。最后,jQuery 4.0支持的所有瀏覽器的最新版本都采用了通用的事件順序。不幸的是,它與jQuery多年前選擇的一致順序不同,這使得這是一個突破性的變化。至少現在每個人都在同一頁上! ## 事件循環(Event Loop) 人們可能會驚訝地發現 PHP 標準庫已經擁有我們編寫事件驅動和非阻塞應用程序所需的一切。只有當我們要求它同時輪詢數千個文件描述符以進行 IO 活動時,我們才會在這方面達到原生 PHP 功能的限制。但是,即使在這種情況下,問題也不在于 PHP,而在于底層系統`select()`調用,隨著負載的增加,它的性能下降是線性的。 對于擴展到大容量的性能,我們需要目前僅在擴展中才能找到的更高級的功能。例如,如果您希望在支持 Amp 的套接字服務器中同時為 10,000 個客戶端提供服務,您應該使用基于 PHP 擴展的事件循環實現之一。但是,如果您在嚴格的本地程序中使用 Amp 以實現非阻塞并發,或者您不需要在服務器應用程序中同時處理數百個客戶端,則原生 PHP 功能應該足夠了。 ### 全局訪問器(Global Accessor) Amp 對事件循環使用全局訪問器,因為每個應用程序只有一個事件循環。同時運行兩個循環是沒有意義的,因為它們只需要以繁忙的等待方式相互調度才能正確運行。 應該通過`Amp\Loop`提供的方法訪問事件循環。首次使用訪問器時,Amp 將自動設置可用的最佳驅動程序,請參閱下一節。 `Amp\Loop::set()`可用于設置自定義驅動程序或在測試中重置驅動程序,因為每個測試都應使用新的驅動程序實例運行以實現測試隔離。對于 PHPUnit,您可以使用[TestListener](https://github.com/amphp/phpunit-util)在每次測試后自動重置事件循環。 ### 實現(Implementations) Amp 基于各種后端提供不同的事件循環實現。所有實現都擴展了`Amp\Loop\Driver`。從外部 API 的角度來看,它們的行為方式完全相同。主要區別與潛在的性能特征有關。當前的實現在這里列出: | Class | Extension | Repository | | :-: | :-: | :-: | | Amp\\Loop\\NativeDriver | \- | \- | | Amp\\Loop\\EvDriver | pecl/ev | pecl-ev | | Amp\\Loop\\EventDriver | pecl/event | pecl-event | | Amp\\Loop\\UvDriver | pecl/uv | pecl-uv | 為您的應用程序選擇哪一種實現并不重要。 Amp 將自動選擇可用的最佳驅動程序。在本地依賴`NativeDriver`進行開發的同時,在生產中擁有其中一個擴展是非常好的。 如果您想在開發過程中快速切換實現,例如為了比較或測試,您可以將`AMP_LOOP_DRIVER`環境變量設置為其中一個類。如果您使用自定義實現,這僅在實現不帶任何參數時才有效。 ### 事件循環作為[任務調度](https://so.csdn.net/so/search?q=%E4%BB%BB%E5%8A%A1%E8%B0%83%E5%BA%A6&spm=1001.2101.3001.7020)器(Event Loop as Task Scheduler) 為了有效地使用事件循環進行編程,我們首先需要了解的是: **The event loop is our task scheduler.** 只要它運行,事件循環就控制程序流程。一旦我們告訴事件循環運行,它將保持控制,直到應用程序出錯、無事可做或被明確停止。 思考這個非常簡單的例子: ``` <?php require "vendor/autoload.php"; use Amp\Loop; function tick() { echo "tick\n"; } echo "-- before Loop::run()\n"; Loop::run(function() { Loop::repeat($msInterval = 1000, "tick"); Loop::delay($msDelay = 5000, "Amp\\Loop::stop"); }); echo "-- after Loop::run()\n"; ``` 執行上述示例后,您應該會看到如下輸出: ``` -- before Loop::run() tick tick tick tick -- after Loop::run() ``` 這個輸出表明事件循環的運行循環內部發生的事情就像它自己的獨立程序一樣。除非沒有更多計劃事件或調用`Loop::stop()`,否則您的腳本將不會繼續超過`Loop::run()`點。 雖然應用程序可以并且經常確實完全在運行循環的范圍內發生,但我們也可以使用事件循環來執行以下示例,該示例為交互式控制臺輸入強加了一個短暫的超時: ``` <?php use Amp\Loop; $myText = null; function onInput($watcherId, $stream) { global $myText; $myText = fgets($stream); stream_set_blocking(STDIN, true); Loop::cancel($watcherId); Loop::stop(); } Loop::run(function () { echo "Please input some text: "; stream_set_blocking(STDIN, false); // Watch STDIN for input Loop::onReadable(STDIN, "onInput"); // Impose a 5-second timeout if nothing is input Loop::delay($msDelay = 5000, "Amp\\Loop::stop"); }); var_dump($myText); // whatever you input on the CLI // Continue doing regular synchronous things here. ``` 顯然,在這個例子中我們可以簡單地同步使用`fgets(STDIN)`。我們只是展示了可以根據需要進出事件循環以混合同步任務和非阻塞任務。
                  <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>

                              哎呀哎呀视频在线观看