boost的asio異步調用的疑問?
這里只說asio的stackful routine,它是通過BOOST.COROUTINE里的非對稱協程實現的。非對稱協程很容易實現生產者/消費都模型,它可以簡單理解成一個pull_type(消費者)+一個push_type(生產者),兩者都可以通過調用自己的operator()來讓出控制權,看起來很像是用goto語句在函數中間跳入跳出。但由于協程交出控制權時是保存了狀態的,所以在重新拿到控制權后能夠接著從讓出位置處繼續執行。明白非對稱協程后就很容易理解ASIO了。ASIO里創建協程是通過spawn完成的:
這里相當于由io_service和function組成了一對非對稱協程,io_service扮演pull_type,function扮演push_type。平時io_service處于io阻塞狀態,有事件到達時將控制權交給function,function處理到需要下一個io事件時,又把控制權交還給io_service,以此循環直到function結束。現在來回答你的兩個問題:交出控制權后切換到哪個協程了???可以理解成切換到io_service::run里面去了。切換過去干了啥??? 切換過去等待對應的io事件.