Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Briefly Introduction of Kotlin coroutines
Search
Elvis Lin
October 19, 2018
Programming
1
300
Briefly Introduction of Kotlin coroutines
Introduce basic concepts of Kotlin coroutines
Elvis Lin
October 19, 2018
Tweet
Share
More Decks by Elvis Lin
See All by Elvis Lin
Protect Users' Privacy in iOS 14
elvismetaphor
0
53
Dubugging Tips and Tricks for iOS development
elvismetaphor
0
53
Strategies of Facebook LightSpeed project
elvismetaphor
0
89
Background Execution And WorkManager
elvismetaphor
2
490
作為一個跨平台的 Mobile App 開發者,從入門到放棄!?
elvismetaphor
2
520
Dependency Injection for testability of iOS app
elvismetaphor
1
1.4k
MotionLayout Brief Introduction
elvismetaphor
1
330
Chapter 10. Pattern Matching with Regular Expressions
elvismetaphor
0
49
Machine Learning Application on Mobile Devices
elvismetaphor
0
110
Other Decks in Programming
See All in Programming
Micro Frontendsで築いた 共通基盤と運用の試行錯誤 / Building a Shared Platform with Micro Frontends: Operational Learnings
kyntk
0
120
知られているようで知られていない JavaScriptの仕様 4選
syumai
0
630
Web エンジニアが JavaScript で AI Agent を作る / JSConf JP 2025 sponsor session
izumin5210
4
2k
Java_プロセスのメモリ監視の落とし穴_NMT_で見抜けない_glibc_キャッシュ問題_.pdf
ntt_dsol_java
0
230
GeistFabrik and AI-augmented software development
adewale
PRO
0
160
AWS CDKの推しポイントN選
akihisaikeda
1
120
flutter_kaigi_2025.pdf
kyoheig3
1
350
2025 컴포즈 마법사
jisungbin
0
150
Stay Hacker 〜九州で生まれ、Perlに出会い、コミュニティで育つ〜
pyama86
2
2.4k
仕様がそのままテストになる!Javaで始める振る舞い駆動開発
ohmori_yusuke
8
4.6k
AIと協働し、イベントソーシングとアクターモデルで作る後悔しないアーキテクチャ Regret-Free Architecture with AI, Event Sourcing, and Actors
tomohisa
2
8k
CSC509 Lecture 13
javiergs
PRO
0
260
Featured
See All Featured
Thoughts on Productivity
jonyablonski
73
4.9k
Visualization
eitanlees
150
16k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
659
61k
Mobile First: as difficult as doing things right
swwweet
225
10k
Into the Great Unknown - MozCon
thekraken
40
2.2k
Done Done
chrislema
186
16k
The Cult of Friendly URLs
andyhume
79
6.7k
Build The Right Thing And Hit Your Dates
maggiecrowley
38
2.9k
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
9
980
Become a Pro
speakerdeck
PRO
29
5.6k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
12
1.3k
Being A Developer After 40
akosma
91
590k
Transcript
Kotlin Coroutines, 從入⾨門到入⾨門 Elvis Lin(@elvismetaphor) Taiwan 2018 #JCConf
關於我 • Elvis Lin • Android, iOS 與 React Native
永遠的初學者 • Twitter: @elvismetaphor • Blog: https://blog.elvismetaphor.me #JCConf Taiwan 2018
⼤大綱 • 循序處理理 • 並⾏行行處理理與Multi-thread • Why Coroutines? • 基本的使⽤用⽅方式
#JCConf Taiwan 2018
循序處理理 #JCConf Taiwan 2018 Main
循序處理理的程式 fun main(args: Array<String>) { println("First") println("Second") println(“Third") } #JCConf
Taiwan 2018
循序處理理的程式與Thread fun main(args: Array<String>) { println("First") printDelayed(“Second") println("Third") } fun
printDelayed(message: String) { Thread.sleep(1000) println(message) } #JCConf Taiwan 2018
循序處理理的程式與 Coroutines fun main(args: Array<String>) { println(“First") runBlocking { printDelay("Second")
} println("Third") } suspend fun printDelay(message: String) { delay(1000) println(message) } #JCConf Taiwan 2018
循序處理理的程式 與 Coroutines(簡易易版) fun main(args: Array<String>) { println(“First") runBlocking {
delay(1000) println(“Second”) } println("Third") } #JCConf Taiwan 2018
並⾏行行處理理 (Multi-thread) #JCConf Taiwan 2018 Main Other
並⾏行行處理理的程式與 Thread fun main(args: Array<String>) { println("First") printNonBlocking("Second") println("Third") }
fun printNonBlocking(message: String) { Thread { Thread.sleep(1000) println(message) }.start() } // Output: First Third Second
並⾏行行處理理的程式與 coroutines fun main(args: Array<String>) { println("First") launch { printDelay("Second")
} println("Three") } suspend fun printDelay(message: String) { delay(1000) println(message) } // Output: First Third Second #JCConf Taiwan 2018
Why Coroutines #JCConf Taiwan 2018
Coroutines • Coroutines are like very light-weight thread • Coroutines
computations can be done without blocking other threads. • Coroutine 的執⾏行行可以更更有效地利利⽤用原本已經建立在 ThreadPool 裡⾯面的 Threads #JCConf Taiwan 2018
常⽤用的關鍵字 • suspend • delay • launch • runBlocking •
await • async #JCConf Taiwan 2018
suspend • ⼀一個 modifier • ⼀一個 suspend 的 function 只可以被
suspend function 或另⼀一 個 coroutine 呼叫 #JCConf Taiwan 2018
launch • 執⾏行行⼀一個 async 的 job #JCConf Taiwan 2018 launch
{ anSimpleFunction() }
runBlocking • 執⾏行行⼀一個 sync 的 job #JCConf Taiwan 2018 runBlocking
{ anSimpleFunction() }
async & await • aysnc {…} 會回傳⼀一個 Deferred<T> • 在回傳的
deferred 上⾯面加上 await 會獲得值 #JCConf Taiwan 2018 val value = async {calculate(1)}.await()
Live Demo https://gist.github.com/elvismetaphor/ 810712e3a08863c963c871f1bca0b3f2 #JCConf Taiwan 2018
Coroutines v.s. RxJava • Coroutines: 更更輕量量,更更容易易將原本循序式的程式改成非同 步、並⾏行行處理理的⽅方式 • RxJava: 提供更更豐富的
operators 做 stream 的轉換 • 根據你的使⽤用情境挑選適合的 library #JCConf Taiwan 2018
總結 • Coroutine 提供⼀一個類似 Thread 的功能,但是更更輕量量的操 作 • Coroutine 讓你可以容易易的將原本同步操作的邏輯轉換成非
同步操作的邏輯 #JCConf Taiwan 2018
參參考資料 • https://kotlinlang.org/docs/reference/coroutines- overview.html • Introduction to coroutines: https://youtu.be/_hfBv0a09Jc •
Exploring coroutines in Kotlin: https://youtu.be/ jT2gHPQ4Z1Q #JCConf Taiwan 2018
Thank you :) #JCConf Taiwan 2018