記錄學習內容。看網路上大大們的文章和影片,做些紀錄。
把這邊當作寫筆記的地方,內容可能有錯誤。
以下內容大多來自網路上大大們的文章。
教學來源:
What are coroutines (aka Java Fibers in Project Loom)?
協程想成輕量級的執行緒,如果用協程的話,系統會自動把協程分派給隨機的執行緒。然後就去執行那個執行緒。
如圖Fibers協程,會經過java Scheduler分派到某個執行緒 。
OS 的Scheduler 再把執行緒分派到CPU的某個core執行。
教學裡有講。協程比較輕量,以KB為單位 。Thread則是1MB。
協程只是把自己放到執行緒的一部分?所以wait io的時候 ,不會讓整個執行緒Waiting
接著來看:
Kotlin Coroutines Beginner Example (Android)
作者的程式載下來後,觀察協程的執行緒名稱。
DefaultDispatcher-worker-4 、DefaultDispatcher-worker-1 之類的 。
可以看出協程 會由系統隨機分派給執行緒 。有時候全部都是同個執行緒 。
有時候會是不同執行緒。
接著來看Kotlin的協程:
Kotlin coroutine 基礎筆記
Kotlin coroutine協程 用launch 執行:
CoroutineScope(IO).launch
GlobalScope 則是一個 singleton class,它的生命週期會長於 activity,沒有很確定自己在做什麼,盡量不要透過它生出 coroutine。
從使用的角度來看,標示了 suspend 的 function,意思就是執行到這個 function 的時候,能夠讓出控制流給其他 coroutine。也就是這些 function 都會說:「我 OK,(有需要的話)你先請」,自己走到後面重新排隊
接著來看swift的協程:
belozierov/SwiftCoroutine
這邊有講到Coroutine的好處:
Suspend instead of block. The main advantage of coroutines is the ability to suspend their execution at some point without blocking a thread and resuming later on.
不會整個block
Fast context switching. Switching between coroutines is much faster than switching between threads as it does not require the involvement of operating system.
交換Coroutine 不會牽扯到作業系統,是由使用者程式端在控制 。所以交換Coroutine 比交換thread 快很多 。
Asynchronous code in synchronous manner. The use of coroutines allows an asynchronous, non-blocking function to be structured in a manner similar to an ordinary synchronous function. And even though coroutines can run in multiple threads, your code will still look consistent and therefore easy to understand.
Coroutines 可以把 http request 寫的 很像 照順序 的樣子。
像是這邊作者有寫
launch { // coroutine a
println("4")
getRemoteServer("a")
println("5")
}
getRemoteServer("a") 是 http request 。
但是順序還是會一步一步執行
會是: 4 、getRemoteServer 、5。
而不是4 、5、getRemoteServer
接著在看:
Coroutines in C/C++