É abordado o tópico de programação assíncrona, focando no modo de funcionamento das Coroutines em Kotlin e como ele se diferencia das tradicionais Threads. É visualizado também casos de uso, verificando onde é mais vantajoso a aplicação de cada uma.
14. Threads - DesvantagensThreads - Desvantagens
Quanto mais threads:
1. Maior trabalho pro SO
2. Maior consumo de memória
3. Maior tempo de CPU ociosa
22. Continuation on Direct StyleContinuation on Direct Style
fun updatePosAssortment(posId: Int): Response{
val prices = getAmePrices()
val products = getAmeProducts()
val savePriceProductToPOS(prices, products)
return postNotificationToPOS(posId)
}
23. Continuation on Direct StyleContinuation on Direct Style
fun updatePosAssortment(posId: Int): Response{
val prices = getAmePrices()
val products = getAmeProducts()
val savePriceProductToPOS(prices, products)
return postNotificationToPOS(posId)
}
Continuation
24. Continuation on Direct StyleContinuation on Direct Style
fun updatePosAssortment(store): Response{
val prices = getAmePrices()
val products = getAmeProducts()
val savePriceProductToPOS(prices, products)
return postNotificationToPOS(posId)
}
Continuation
29. CPS em KotlinCPS em Kotlin
suspend fun updatePosAssortment(posId : Int): Response { ... }
Object updatePosAssortment(Int posId, Continuation<Response> cont) { ... }
Compilação JVM
30. Máquina de estadosMáquina de estados
suspend fun updatePosAssortment(posId: Int): Response{
//LABEL 0
val prices = getAmePrices()
//LABEL 1
val products = getAmeProducts()
//LABEL 2
val savePriceProductToPOS(prices, products)
//LABEL 3
return postNotificationToPOS(posId)
}
31. Máquina de estadosMáquina de estados
suspend fun updatePosAssortment(posId: Int): Response{
switch (label){
case 0:
val prices = getAmePrices()
case 1:
val products = getAmeProducts()
case 2:
val savePriceProductToPOS(prices, products)
case 3:
postNotificationToPOS(posId)
}
}
32. Máquina de estadosMáquina de estados
suspend fun updatePosAssortment(posId: Int): Response{
val sm = object : CoroutineImpl { ... }
switch (label){
case 0:
sm.label = 1
sm.posId = posId
val prices = getAmePrices(sm)
case 1:
val products = getAmeProducts()
case 2:
val savePriceProductToPOS(prices, products)
case 3:
postNotificationToPOS(posId)
}
}