Я читаю Котлін Котлін і знаю, що він заснований на 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
Потік повертається в пул під час очікування програми, і коли очікування завершено, програма продовжується на вільній нитці в пулі.
