Рассматривая пример https://github.com/kotlin/kotlinx.coroutines/blob/master/kotlinx-coroutines-core/jvm/test/guide/example-sync-07.kt, а точнее следующий фрагмент
// This function launches a new counter actor
fun CoroutineScope.counterActor() = actor<CounterMsg> {
var counter = 0 // actor state
for (msg in channel) { // iterate over incoming messages
when (msg) {
is IncCounter -> counter++
is GetCounter -> msg.response.complete(counter)
}
}
}
Не могу не заметить, что, если, например, 5 других сопрограмм отправят сообщение GetCounter вышеприведенному субъекту, онибудет «обслуживаться» последовательно один за другим, т.е. параллелизм не достигается. Несмотря на то, что у нас есть ЦП с 8 физическими потоками, каждая из «клиентских» сопрограмм, считывающих значение счетчика, будет ограничена последовательным выполнением сопрограммы актера.
Как можно избежать этой последовательной обработки при использовании сопрограммы актера?
Спасибо