arg*_*g20 3 jdbc kotlin kotlinx.coroutines
我在 API 后端使用 Kotlin。我不想在common pool
. 基本上,我想创建一个CoroutineContext
具有多个与数据库匹配的线程的线程maximumPoolSize
。
完成此任务的最佳方法是什么(一般情况下以及针对我的特定用例)?我知道 Kotlin 提供了contexts
开箱即用的功能,但是创建我自己的最佳方法是什么?
额外问题:如果我的 jdbc 连接池大小为 3,那么使用线程池大小为 3 的协程上下文是否有意义?这能保证最好的并发性吗?
该函数newFixedThreadPoolContext
现在被认为在当前版本的 Kotlin 协程 (1.3.0) 中已过时,因为它现在带有注释@ObsoleteCoroutinesApi
,如果您尝试使用,它会向您发出警告。文档还指出,它将在未来被替换。
现在创建 CoroutineContext 的推荐方法是通过
Executors.newFixedThreadPool(3).asCoroutineDispatcher()
Run Code Online (Sandbox Code Playgroud)
因此,带有导入的完整示例(还创建了 CoroutineScope)如下所示
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.asCoroutineDispatcher
import java.util.concurrent.Executors
import kotlin.coroutines.CoroutineContext
fun coroutineScope(threads: Int): CoroutineScope {
val context: CoroutineContext = Executors.newFixedThreadPool(threads).asCoroutineDispatcher()
return CoroutineScope(context)
}
Run Code Online (Sandbox Code Playgroud)
您可以CoroutineContext
使用以下命令创建由具有固定线程数的线程池支持的线程newFixedThreadPoolContext
:
val myContext = newFixedThreadPoolContext(nThreads = 3, name = "My JDBC context")
Run Code Online (Sandbox Code Playgroud)
是的,将线程池的大小与连接池的大小相匹配似乎是一个好主意,因为这样您的线程(假设它们每次使用一个连接)将始终为它们准备好数据库连接 - 这是一篇博客帖子建议相同。
归档时间: |
|
查看次数: |
3159 次 |
最近记录: |