Ответ
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 + отдельную корутину.