Я понимаю сопрограммы и потоки Kotlin так:

Один поток может запускать только одну сопрограмму за раз. Поток может манипулировать несколькими сопрограммами. Он может приостановить сопрограмму и запустить другую сопрограмму. Но в данный момент времени в потоке будет работать только одна сопрограмма. Вы не можете запускать несколько сопрограмм в одном потоке в один и тот же момент времени.

Это правильно?

1
Abhay P 5 Окт 2020 в 03:22

1 ответ

Лучший ответ

Да, это правильно.

Сопрограмму можно рассматривать как последовательность инструкций, выполняемую потоком до тех пор, пока он не встретит точку приостановки, в которой сопрограмма приостанавливает свое выполнение (сохраняя стек вызовов и локальные переменные для возобновления позже) и передает управление, и в этом случае нет. дольше запускается в потоке, в котором он работал.

Это очень похоже на то, как функция, которая возвращает, больше не работает в потоке, возвращая управление вызывающему, но сопрограмма дополнительно сохраняет свое состояние, чтобы его можно было возобновить позже, в том же или другом потоке. Как только сопрограмма передает управление, поток возвращается к коду, который запустил или возобновил сопрограмму. Этот код может быть или не быть другой сопрограммой.

Вы можете рассматривать поток как примитив более низкого уровня (уровня ОС или уровня JVM), чем сопрограммы. Весь код в приложении выполняется в каком-то потоке, по одной последовательности инструкций в каждом потоке за раз, и сопрограммы в этом смысле не являются исключением.

1
hotkey 5 Окт 2020 в 18:41