假设我正在运行一个简单的Web服务器,该服务器分配100个线程来处理传入的请求。当请求到来时,将分配一个线程并将其阻塞,直到有可用响应为止。响应可用后,将发送响应,并且线程再次空闲。
要满足一个请求,我需要进行2次数据库调用,并基本总结出结果:
suspend fun getUserData(username: String): String = {
val firstName = async { database1.findUser(username) } // a suspended function
val lastName = async { database2.findUser(username) } // a suspended function
return firstName.await() + lastName.await();
}
假设我有一个main方法,该方法调用上述方法来处理请求:
fun main(username) {
runBlocking {
return userData(username)
}
}
我的理解是,getUserData中的异步代码将在Default dispatcher with as many cores as CPUs.
上运行这表明以下内容:
这引起了我的问题:
注意:我不是在寻找其他服务器/框架。相反,鉴于我已经拥有的东西,我很好奇我是否可以利用协程增加并发性。如果没有,我可以按顺序运行查询。