DefaultBlockingDispatcherOrNull

使用在阻塞API(例如 runInBlocking )或非Java协程环境中的默认调度器。 会在首次被获取的时候进行实例化。

默认情况下,DefaultBlockingDispatcherOrNull 为 null,即不使用特别的调度器。

存在部分可配置内容:

属性JVM参数默认值
核心线程数simbot.runInBlocking.dispatcher.coreSizeavailableProcessors / 2
最大线程数simbot.runInBlocking.dispatcher.maxSizeavailableProcessors * 4
维持时间(毫秒)simbot.runInBlocking.dispatcher.keepAliveTime60000

除了提供调度器的使用,你也可以指定一个从 Dispatchers 中存在的属性。使用如下JVM参数可以覆盖调度器的使用: (参数值不区分大小写)

JVM参数对应值描述
simbot.runInBlocking.dispatcher=ioDispatchers.IO使用 Dispatchers.IO 作为默认调度器.
simbot.runInBlocking.dispatcher=defaultDispatchers.Default使用 Dispatchers.Default 作为默认调度器.
simbot.runInBlocking.dispatcher=mainDispatchers.Main使用 Dispatchers.Main 作为默认调度器.
simbot.runInBlocking.dispatcher=unconfinedDispatchers.Unconfined使用 Dispatchers.Unconfined 作为默认调度器.
simbot.runInBlocking.dispatcher=forkJoinPoolForkJoinPool使用 ForkJoinPool 作为默认调度器.
simbot.runInBlocking.dispatcher=virtualVirtualThreadDispatcher(since 3.3.0) 使用 VirtualThreadDispatcher 作为默认调度器.
simbot.runInBlocking.dispatcher=virtualOrIoVirtualThreadDispatcher or Dispatchers.IO if virtual thread not support(since 3.3.0) 使用 VirtualThreadDispatcher 作为默认调度器,如果虚拟线程不支持,则退化为 Dispatchers.IO
simbot.runInBlocking.dispatcher=customdispatcher from CustomBlockingDispatcherProvider(since 3.3.0) 通过 SPI 加载 CustomBlockingDispatcherProvider 并通过其构建 CoroutineDispatcher

如果选择了使用某个具体的调度器,那么你可以额外指定属性 simbot.runInBlocking.dispatcher.limitedParallelism 来通过 CoroutineDispatcher.limitedParallelism 来限制使用的最大并发数。更多说明(和警告)参考 CoroutineDispatcher.limitedParallelism