Я читаю Котлін Котлін і знаю, що він заснований на suspend
функції. Але що suspend
означає?
Спрограма чи функція припиняється?
З https://kotlinlang.org/docs/reference/coroutines.html
В основному, супроводи - це обчислення, які можна призупинити, не перекриваючи нитку
Я чув, як люди часто кажуть "призупинити функцію". Але я гадаю, що саме цей пристрій припиняється, тому що він чекає завершення функції? "призупинити" зазвичай означає "припинити функціонування", в цьому випадку порядок роботи не працює.
🤔 Чи слід говорити про те, що дія програми призупинено?
Яку програму призупиняють?
З https://kotlinlang.org/docs/reference/coroutines.html
Щоб продовжити аналогію, функція wait () може бути функцією призупинення (отже, її також можна викликати з блоку async {}), яка призупиняє виконання програми, доки не буде проведено обчислення та поверне його результат:
async { // Here I call it the outer async coroutine
...
// Here I call computation the inner coroutine
val result = computation.await()
...
}
🤔 У ньому написано, що "призупиняє виконання програми, поки не буде проведено обчислення", але це може бути як легка нитка. Отже, якщо призупинення дії програми призупинено, як можна зробити обчислення?
Ми бачимо, що await
це викликано computation
, тому це може бути async
те, що повертається Deferred
, а це означає, що він може запустити іншу програму
fun computation(): Deferred<Boolean> {
return async {
true
}
}
🤔 У цитаті йдеться про те, що призупинення роботи програми . Чи означає suspend
це зовнішню програму async
чи suspend
внутрішню програму computation
?
Є чи suspend
означає , що в той час як зовнішні async
сопрограммний чекають ( await
) для внутрішнього computation
співпрограми до кінця, він (зовнішній async
сопрограммний) Idles (звідси і назва припинення) і повертає потік для пулу потоків, і коли дитина computation
співпрограми закінчується, вона (зовнішня async
співпрограми ) прокидається, бере іншу нитку з басейну і продовжує?
Причина, про яку я згадую нитку, пов’язана з https://kotlinlang.org/docs/tutorials/coroutines-basic-jvm.html
Потік повертається в пул під час очікування програми, і коли очікування завершено, програма продовжується на вільній нитці в пулі.