io_service::run()的阻塞行為源自於它對工作和處理程序的處理。 它一直處於阻塞狀態,直到:
當io_service::run() 阻塞直到「沒有更多處理程序要分派」時,它表示沒有註冊回調形式的未完成任務。
在第一個範例(3a) 中,io_service 阻塞在run() 內,直到所有三個已發布的斐波那契計算處理程序都已執行。
客戶端程式碼似乎使用非同步I/O (async_receive),但它有效地同步運行:
等效的同步操作將是:
boost::asio::error_code error; std::size_t bytes = socket.receive(buffer, error); // Execute handler with error and bytes
混合同步和非同步操作會帶來複雜性。考慮避免這種做法。 Boost.Asio 文件提供了有關非同步程式設計優勢的寶貴見解。
以上是`boost::asio::io_service::run()` 何時阻塞?的詳細內容。更多資訊請關注PHP中文網其他相關文章!