coroutine你可以將它看成一個使用者態的執行緒(一般來它也提供了入口函式、呼叫的引數,以及你放置區域性變數的棧),只不過它是你自己排程的,而且不同coroutine的切換不需要陷入核心態,效率比較高。
linux有提供了getcontext swapcontext等介面來實現coroutine,windows貌似也有相關的。一般來說coroutine用在非同步的場景比較好,非同步執行一般需要維護一個狀態機,狀態的維護需要儲存在全局裡或者你傳進來的引數來,因為每一個狀態回撥都會重新被呼叫。有了coroutine(stackfull)的話你可以不用擔心這個問題,你可以像寫同步的程式碼那樣子,但其實底層還是非同步的,只不過你在等待資料時執行的上下文會暫時被儲存起來,等到資料來臨再將上下文恢復繼續執行。還有一種coroutine是stackless,它本質上也是狀態機實現的,並不能在它上面讓不同的狀態共享區域性變數,貌似boost.asio.coroutine就是這種。
coroutine你可以將它看成一個使用者態的執行緒(一般來它也提供了入口函式、呼叫的引數,以及你放置區域性變數的棧),只不過它是你自己排程的,而且不同coroutine的切換不需要陷入核心態,效率比較高。
linux有提供了getcontext swapcontext等介面來實現coroutine,windows貌似也有相關的。一般來說coroutine用在非同步的場景比較好,非同步執行一般需要維護一個狀態機,狀態的維護需要儲存在全局裡或者你傳進來的引數來,因為每一個狀態回撥都會重新被呼叫。有了coroutine(stackfull)的話你可以不用擔心這個問題,你可以像寫同步的程式碼那樣子,但其實底層還是非同步的,只不過你在等待資料時執行的上下文會暫時被儲存起來,等到資料來臨再將上下文恢復繼續執行。還有一種coroutine是stackless,它本質上也是狀態機實現的,並不能在它上面讓不同的狀態共享區域性變數,貌似boost.asio.coroutine就是這種。