Kotlin coroutine 概述(施工中)

最近正在開發某 Android App 專案,在寫的時候剛好遇到 coroutine 的概念,這個概念卻不太好理解,所以來紀錄一下。

在 Android 開發中,協程(coroutine)是 Kotlin 有別於 Java 的獨有概念。雖然其他語言也有 coroutine 的概念,但是由於 Kotlin 的語言特性,Kotlin coroutine 還是跟其他語言的不太一樣。至於哪裡不一樣我也不知道 :P

以下說明是根據以下文章 + 我自己的粗淺理解寫出來的,如有錯誤歡迎指出:

進程 (Process)、線程 (Thread)、協程 (Coroutine) 的概念講解
Kotlin 的协程用力瞥一眼 - 学不会协程?很可能因为你看过的教程都是错的
進程、線程、協程,傻傻分得清楚!
還有一篇文目前找不到,之後會補上。


Process、Thread 與 Coroutine 的關係

在提到 Coroutine 之前需要理解這三者之間的關係。簡單來說:

  • Process 就是執行中的程式,寫好的 program 執行了就是 Process。
  • Thread 是輕量級的 Process ,Process 會進去 Thread 中執行任務;平常聽到的 Multithreading programming,就是把任務切到不同 Thread 中執行,利用多個 Thread 共享 Process 的資源的特性更快完成任務。
  • Coroutine 是位於 Thread 中執行的一個個任務,通常一個 Thread 中只能執行一個 coroutine。特點是,coroutine 要位於哪個 Thread 中執行可以完全由使用者決定,也就是說,一個 coroutine 在執行中可以在多個 Thread 間切來切去。

下圖可以一目了然這三者之間的關係(圖片擷取自上面第一篇文章):
Process、Thread 與 Coroutine 的關係

由於這篇不是特別探討三者關係的,就先寫到這裡了,有興趣的可以自己找資料(?)

為何需要 Multithread

Kotlin Coroutine 的優勢

實際語法

啟動一個線程

切換到不同 Thread

Suspension Function 與 Callback Function