Slide 1

Slide 1 text

Coroutine to the rescue! Adi Polak

Slide 2

Slide 2 text

About me – Adi Polak @adipolak https://medium.com/@adipolak https://dev.to/adipolak

Slide 3

Slide 3 text

No content

Slide 4

Slide 4 text

Kotlin: 1. Developed by JetBrains (IntelliJ authors) 2. Powers all JetBrains tools 3. Open source 4. 100% interoperable with Java 5. First language on Android 6. Provides: a. Null safety b. Higher order function c. Data classes d. Extension functions e. Since Kotlin 1.1 – coroutines f. … MORE! @AdiPolak L E T ’ S S TA R T F R O M T H E B E G I N N I N G :

Slide 5

Slide 5 text

Kotlin coroutines

Slide 6

Slide 6 text

C o r o u t i n e s c o m m o n u s e c a s e s • Asynchronous • Non blocking @AdiPolak • Server side - microservices • Android app development • … W h y ?

Slide 7

Slide 7 text

C a n w e c o m p a r e c o r o u t i n e a n d t h r e a d s ? @AdiPolak

Slide 8

Slide 8 text

CPU CORE 1 Thread 1 Thread 2 Thread 3 CONCURENCY IN THREADS CPU CORE 2 Thread 1 Thread 2 Thread 3 @AdiPolak

Slide 9

Slide 9 text

Kotlin runtime Coroutine 1 Coroutine 2 Coroutine 3 CONCURENCY IN COROUTINES Coroutine 1 Coroutine 3 @AdiPolak

Slide 10

Slide 10 text

HOW? SUSPENDIND FUNCTIONS CHANNELS BUILDERS CONTEXT AND SCOPE @AdiPolak

Slide 11

Slide 11 text

suspend fun someBackgroundTask(param: List): Int { // long running operation return 7 } fun someBackgrounTask(param: List, callback: Continuation): Int { // long running operation return 7 } SUSPENDING FUNCTIONS @AdiPolak

Slide 12

Slide 12 text

Job Dispatcher COROUTINES CONTEXT AND SCOPE @AdiPolak Dispatchers.Default Dispatchers.Main Dispatchers.IO Dispatchers.Unconfined fun CoroutineScope.launch( context: CoroutineContext = EmptyCoroutineContext, ..): Job coroutineContext[Job]

Slide 13

Slide 13 text

BUILDERS @AdiPolak Extending scope functions: Launch Async Can be used from Main thread: runBlocking

Slide 14

Slide 14 text

COROUTINES CONTEXT, SCOPE AND BUILDERS @AdiPolak coroutineScope { launch(Dispatchers.Default + CoroutineName(”some name")) { doSuspendedTask() } }

Slide 15

Slide 15 text

CHANNELS @AdiPolak val channel1 = Channel(capacity = Channel.RENDEZVOUS) val channel2 = Channel< Any >(capacity = Channel.CONFLATED) val channel3 = Channel< Any >(capacity = 10) val channel4 = Channel< Any >(capacity = Channel.UNLIMITED) https://proandroiddev.com/kotlin-coroutines-channels-csp-android-db441400965f Channel is a non-blocking primitive for communication between sender using [SendChannel] and receiver using [ReceiveChannel].

Slide 16

Slide 16 text

Demo https://github.com/adipola/kotlin-coroutine-transaction-process-mock

Slide 17

Slide 17 text

• Ktor • Vert.x • Arrow • … @AdiPolak Frameworks

Slide 18

Slide 18 text

Summary • What and why coroutines are important • Coroutine and threads • Key concepts • Demo • Frameworks @AdiPolak

Slide 19

Slide 19 text

Questions