Saya membaca Kotlin Coroutine dan tahu bahwa ini didasarkan pada suspend
fungsi. Tapi apa suspend
artinya?
Coroutine atau fungsi ditangguhkan?
Dari https://kotlinlang.org/docs/reference/coroutines.html
Pada dasarnya, coroutine adalah komputasi yang dapat ditangguhkan tanpa memblokir utas
Saya mendengar orang sering mengatakan "fungsi tunda". Tapi menurut saya coroutine-nya yang di-suspend karena menunggu fungsinya selesai? "suspend" biasanya berarti "hentikan operasi", dalam hal ini coroutine dalam keadaan idle.
🤔 Haruskah kita mengatakan coroutine ditangguhkan?
Coroutine mana yang ditangguhkan?
Dari https://kotlinlang.org/docs/reference/coroutines.html
Untuk melanjutkan analoginya, await () bisa menjadi fungsi penangguhan (karenanya juga bisa dipanggil dari dalam blok {} async) yang menangguhkan coroutine sampai beberapa komputasi selesai dan mengembalikan hasilnya:
async { // Here I call it the outer async coroutine
...
// Here I call computation the inner coroutine
val result = computation.await()
...
}
🤔 Dikatakan "yang menangguhkan coroutine sampai beberapa komputasi selesai", tetapi coroutine seperti thread yang ringan. Jadi, jika coroutine di-suspend, bagaimana komputasi bisa dilakukan?
Kami melihat await
dipanggil computation
, jadi mungkin async
itu kembali Deferred
, yang berarti dapat memulai coroutine lain
fun computation(): Deferred<Boolean> {
return async {
true
}
}
🤔 Kutipan mengatakan bahwa menghentikan coroutine . Apakah itu berarti coroutine suspend
luar async
, atau coroutine suspend
dalam computation
?
Apakah suspend
berarti bahwa sementara async
coroutine luar sedang menunggu ( await
) untuk computation
coroutine bagian dalam selesai, itu ( async
coroutine luar ) menganggur (karena itu nama menangguhkan) dan mengembalikan utas ke kumpulan utas, dan ketika computation
coroutine turunan selesai, itu ( async
coroutine luar ) bangun, mengambil utas lain dari kolam dan melanjutkan?
Alasan saya menyebutkan utas ini adalah karena https://kotlinlang.org/docs/tutorials/coroutines-basic-jvm.html
Utas dikembalikan ke kumpulan saat coroutine menunggu, dan saat penantian selesai, coroutine dilanjutkan pada utas gratis di kumpulan