Coroutines Dispatchers.IO
上下文仅限于64个线程。这还不足以在高并发系统中与阻塞代码进行可靠的接口。
文献状态表示:
此池中的其他线程将根据需要创建并关闭。此dispatcher使用的线程数受“kotlinx.coroutines.io.parallelism”(IO_PARALLELISM_PROPERTY_NAME)系统属性值的限制。它默认为64个线程的限制或核心数目(以较大者为准)。
我希望将kotlinx.coroutines.io.parallelism
系统属性更改为其他属性。但是,如果我这么做的话:
adb shell "setprop kotlinx.coroutines.io.parallelism 1000"
然后我得到以下结果:
setprop: failed to set property 'kotlinx.coroutines.io.parallelism' to '1000'
此外,如果我想发布我的应用程序,那么我也需要在用户的设备上更改这个属性,对吗?否则,该应用程序将无法工作。然而,即使假设有可能,据我所知,所有更改此属性的应用程序都将覆盖对方的设置。这听起来不像是一种可靠的操作方式。
因此,我在这方面有三个问题:
我知道,如果我只使用协同,而不阻塞代码,这将不会是一个问题(可能)。但是,让我们假设我需要使用阻塞调用(例如,遗留Java代码)。
发布于 2019-10-21 16:59:00
IO_PARALLELISM_PROPERTY_NAME
不是指安卓系统属性,而是指Java属性。只需在应用程序的早期添加以下代码,例如在Application.onCreate()
中的第一个代码,以将其更改为1000
import static kotlinx.coroutines.DispatchersKt.IO_PARALLELISM_PROPERTY_NAME;
System.setProperty(IO_PARALLELISM_PROPERTY_NAME, Integer.toString(1000));
这不一定要在每个设备的基础上使用根或者类似的东西。它将在任何地方工作,因为它是使用常规应用程序API的常规应用程序代码。
只要在第一次使用Dispatchers.IO
之前执行此操作,就会应用您的属性更改。
发布于 2019-10-21 16:03:05
您可以使用任意数量的线程创建自己的调度程序,如下所示
val dispatcher = Executors.newFixedThreadPool(128).asCoroutineDispatcher()
发布于 2022-05-22 06:52:32
使用kotlinx 1.6.0,您可以使用"limitedParallelism“方法限制用于调度程序的线程。
示例:
// 100 threads for MySQL connection
val myMysqlDbDispatcher = Dispatchers.IO.limitedParallelism(100)
// 60 threads for MongoDB connection
val myMongoDbDispatcher = Dispatchers.IO.limitedParallelism(60)
发布说明:https://blog.jetbrains.com/kotlin/2021/12/introducing-kotlinx-coroutines-1-6-0/#dispatcher-views-api
https://stackoverflow.com/questions/58489659
复制相似问题