Kotlin参与者协程和并发问题

Kotlin参与者协程和并发问题,kotlin,concurrency,coroutine,kotlin-coroutines,Kotlin,Concurrency,Coroutine,Kotlin Coroutines,当看这个例子时,更具体地说,看下面的片段 // 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) {

当看这个例子时,更具体地说,看下面的片段

// 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)
        }
    }
}
//此函数启动一个新的计数器
fun CoroutineScope.antimerator()=参与者{
变量计数器=0//actor状态
对于(通道中的消息){//迭代传入消息
何时(味精){
是计数器->计数器吗++
是GetCounter->msg.response.complete(计数器)
}
}
}
我不得不注意到,例如,如果5个其他协同程序向上述参与者发送GetCounter消息,它们将依次“服务”,即没有实现并行性。尽管我们的CPU有8个物理线程,但读取计数器值的每个“客户机”协程都将受到actor协程的顺序执行的约束

在使用actor协程时,我们如何避免这种顺序处理


谢谢

如果您指的是这个特定的示例,那么递增计数器并不是并行化的,至少在任何一般方法中都不是。如果你问得更笼统一些,参与者可以在
Dispatchers.Default
中轻松启动昂贵的异步计算,并将其并行化。我在问一种方法,可以并行化参与者拥有的数据的读取访问。你试过启动子协同程序吗?我认为
launch
async
更合适,因为您将结果推送到响应中。启动的作业可以做到这一点。如果您指的是这个特定的示例,那么递增计数器并不是并行化的事情,至少在任何通用方法中都是如此。如果你问得更笼统一些,参与者可以在
Dispatchers.Default
中轻松启动昂贵的异步计算,并将其并行化。我在问一种方法,可以并行化参与者拥有的数据的读取访问。你试过启动子协同程序吗?我认为
launch
async
更合适,因为您将结果推送到响应中。启动的作业可以做到这一点。