<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之旅 廣告
                # 編程須知 [TOC] 這個頻道內會詳細介紹異步編程與同步編程的不同之處以及需要注意的事項。 ## 注意事項 * 不要在代碼中執行`sleep`以及其他睡眠函數,這樣會導致整個進程阻塞 * `exit/die`是危險的,會導致`Worker`進程退出 * 可通過`register_shutdown_function`來捕獲致命錯誤,在進程異常退出時做一些清理工作,具體參考[捕獲Server運行期致命錯誤](捕獲Server運行期致命錯誤.md "捕獲Server運行期致命錯誤") * `PHP`代碼中如果有異常拋出,必須在回調函數中進行`try/catch`捕獲異常,否則會導致工作進程退出 * 不支持`set_exception_handler`,必須使用`try/catch`方式處理異常 * `Worker`進程不得共用同一個`Redis`或`MySQL`等網絡服務客戶端,`Redis/MySQL`創建連接的相關代碼可以放到`onWorkerStart`回調函數中,具體參考[是否可以共用1個redis或mysql連接](是否可以共用1個redis或mysql連接.md) ## 異步編程 * 異步程序要求代碼中不得包含任何同步阻塞操作 * **異步與同步代碼不能混用,一旦應用程序使用了任何同步阻塞的代碼,程序即退化為同步模式** ## 協程編程 使用`Coroutine`特性,請認真閱讀[協程編程須知](Coroutine-編程須知.md) ## 并發編程 請務必注意與`同步阻塞`模式不同,`異步`和`協程`模式下程序是**并發執行**的,在同一時間內`Server`會存在多個請求,因此**應用程序必須為每個客戶端或請求,創建不同的資源和上下文**。否則不同的客戶端和請求之間可能會產生數據和邏輯錯亂。 ## 類/函數重復定義 新手非常容易犯這個錯誤,由于`Swoole`是常駐內存的,所以加載類/函數定義的文件后不會釋放。因此引入類/函數的php文件時必須要使用`include_once`或`require_once`,否則會發生`cannot redeclare function/class`的致命錯誤。 ## 內存管理 `PHP`守護進程與普通`Web`程序的變量生命周期、內存管理方式完全不同。請參考[Server 內存管理](Server內存管理機制.md)頁面。**編寫`Server`或其他常駐進程時需要特別注意。** ## 進程隔離 `Swoole\Server`程序的不同`Worker`進程之間是隔離的,在編程時操作全局變量、定時器、事件監聽,僅在當前進程內有效。請參考[進程隔離](進程隔離.md) `Swoole`提供的`Table`、`Atomic`、`Lock`組件是可以用于多進程編程的,但必須在`Server->start`之前創建。另外`Server`維持的`TCP`客戶端連接也可以跨進程操作,如`Server->send`和`Server->close`。
                  <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>

                              哎呀哎呀视频在线观看