DefaultBlockingDispatcherOrNull
使用在阻塞API(例如 runInBlocking )或非Java协程环境中的默认调度器。 会在首次被获取的时候进行实例化。
默认情况下,DefaultBlockingDispatcherOrNull 为 null,即不使用特别的调度器。
存在部分可配置内容:
属性 | JVM参数 | 默认值 |
---|---|---|
核心线程数 | simbot.runInBlocking.dispatcher.coreSize | availableProcessors / 2 |
最大线程数 | simbot.runInBlocking.dispatcher.maxSize | availableProcessors * 4 |
维持时间(毫秒) | simbot.runInBlocking.dispatcher.keepAliveTime | 60000 |
除了提供调度器的使用,你也可以指定一个从 Dispatchers 中存在的属性。使用如下JVM参数可以覆盖调度器的使用: (参数值不区分大小写)
JVM参数 | 对应值 | 描述 |
---|---|---|
simbot.runInBlocking.dispatcher=io | Dispatchers.IO | 使用 Dispatchers.IO 作为默认调度器. |
simbot.runInBlocking.dispatcher=default | Dispatchers.Default | 使用 Dispatchers.Default 作为默认调度器. |
simbot.runInBlocking.dispatcher=main | Dispatchers.Main | 使用 Dispatchers.Main 作为默认调度器. |
simbot.runInBlocking.dispatcher=unconfined | Dispatchers.Unconfined | 使用 Dispatchers.Unconfined 作为默认调度器. |
simbot.runInBlocking.dispatcher=forkJoinPool | ForkJoinPool | 使用 ForkJoinPool 作为默认调度器. |
simbot.runInBlocking.dispatcher=virtual | VirtualThreadDispatcher | (since 3.3.0) 使用 VirtualThreadDispatcher 作为默认调度器. |
simbot.runInBlocking.dispatcher=virtualOrIo | VirtualThreadDispatcher or Dispatchers.IO if virtual thread not support | (since 3.3.0) 使用 VirtualThreadDispatcher 作为默认调度器,如果虚拟线程不支持,则退化为 Dispatchers.IO |
simbot.runInBlocking.dispatcher=custom | dispatcher from CustomBlockingDispatcherProvider | (since 3.3.0) 通过 SPI 加载 CustomBlockingDispatcherProvider 并通过其构建 CoroutineDispatcher |
如果选择了使用某个具体的调度器,那么你可以额外指定属性 simbot.runInBlocking.dispatcher.limitedParallelism
来通过 CoroutineDispatcher.limitedParallelism 来限制使用的最大并发数。更多说明(和警告)参考 CoroutineDispatcher.limitedParallelism。