Что такое Coroutine Actors

«Что такое Coroutine Actors» — вопрос из категории Coroutines и Flow, который задают на 23% собеседований Android Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Coroutine Actors — это модель конкурентности, основанная на концепции акторов (из теории акторных моделей). В Kotlin они реализуются через Channel и CoroutineScope, обеспечивая потокобезопасную коммуникацию между корутинами.

Ключевые особенности:

  • Каждый актор обрабатывает сообщения последовательно в своей корутине.
  • Общение происходит через Channel (обычно SendChannel/ReceiveChannel).
  • Избегает гонки данных, так как состояние изменяется только внутри актора.

Пример:

sealed class Message  
class Increment : Message()  
class GetValue(val response: CompletableDeferred<Int>) : Message()  

fun CoroutineScope.counterActor() = actor<Message> {  
    var count = 0  
    for (msg in channel) {  
        when (msg) {  
            is Increment -> count++  
            is GetValue -> msg.response.complete(count)  
        }  
    }  
}  

// Использование:  
val counter = scope.counterActor()  
counter.send(Increment())  
val response = CompletableDeferred<Int>()  
counter.send(GetValue(response))  
println(response.await()) // 1  

Примечание: В Kotlin 1.6+ actor builder помечен как устаревший. Вместо него рекомендуется использовать Channel + отдельную корутину.