В Kotlin Coroutine — это легковесный поток, который позволяет писать асинхронный код последовательно, используя приостановку и возобновление функций без блокировки потоков.
В Kotlin корутины используют интерфейс Job для управления жизненным циклом асинхронных задач. Job представляет собой задачу, которую можно запустить, отменить и отслеживать её состояние.
Потоки (Threads) — это системные объекты, которые позволяют выполнять несколько задач параллельно, каждая со своим собственным стеком вызовов и контекстом выполнения.
Да, работа будет выполнена. В Kotlin корутины, когда вы создаёте Job через оператор collect (например, в Flow), вызов метода join у этого Job приостанавливает текущий поток до завершения корутины, связанной с этим Job.
Использование только одного типа CoroutineScope в Kotlin недопустимо, потому что разные сценарии требуют разного управления жизненным циклом и контекстом корутин.