首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在Android上增加Kotlin协同器的Dispatchers.IO大小?

如何在Android上增加Kotlin协同器的Dispatchers.IO大小?
EN

Stack Overflow用户
提问于 2019-10-21 15:37:45
回答 3查看 5.2K关注 0票数 12

Coroutines Dispatchers.IO上下文仅限于64个线程。这还不足以在高并发系统中与阻塞代码进行可靠的接口。

文献状态表示:

此池中的其他线程将根据需要创建并关闭。此dispatcher使用的线程数受“kotlinx.coroutines.io.parallelism”(IO_PARALLELISM_PROPERTY_NAME)系统属性值的限制。它默认为64个线程的限制或核心数目(以较大者为准)。

我希望将kotlinx.coroutines.io.parallelism系统属性更改为其他属性。但是,如果我这么做的话:

代码语言:javascript
运行
复制
adb shell "setprop kotlinx.coroutines.io.parallelism 1000"

然后我得到以下结果:

代码语言:javascript
运行
复制
setprop: failed to set property 'kotlinx.coroutines.io.parallelism' to '1000'

此外,如果我想发布我的应用程序,那么我也需要在用户的设备上更改这个属性,对吗?否则,该应用程序将无法工作。然而,即使假设有可能,据我所知,所有更改此属性的应用程序都将覆盖对方的设置。这听起来不像是一种可靠的操作方式。

因此,我在这方面有三个问题:

  1. 文档中隐含的属性是否确实是我试图更改的“系统属性”?
  2. 如何为我的应用程序的所有用户在非根设备上更改此属性?
  3. 还有更好的选择吗?

我知道,如果我只使用协同,而不阻塞代码,这将不会是一个问题(可能)。但是,让我们假设我需要使用阻塞调用(例如,遗留Java代码)。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-10-21 16:59:00

IO_PARALLELISM_PROPERTY_NAME不是指安卓系统属性,而是指Java属性。只需在应用程序的早期添加以下代码,例如在Application.onCreate()中的第一个代码,以将其更改为1000

代码语言:javascript
运行
复制
import static kotlinx.coroutines.DispatchersKt.IO_PARALLELISM_PROPERTY_NAME;

System.setProperty(IO_PARALLELISM_PROPERTY_NAME, Integer.toString(1000));

这不一定要在每个设备的基础上使用根或者类似的东西。它将在任何地方工作,因为它是使用常规应用程序API的常规应用程序代码。

只要在第一次使用Dispatchers.IO之前执行此操作,就会应用您的属性更改。

票数 15
EN

Stack Overflow用户

发布于 2019-10-21 16:03:05

您可以使用任意数量的线程创建自己的调度程序,如下所示

代码语言:javascript
运行
复制
val dispatcher = Executors.newFixedThreadPool(128).asCoroutineDispatcher()
票数 12
EN

Stack Overflow用户

发布于 2022-05-22 06:52:32

使用kotlinx 1.6.0,您可以使用"limitedParallelism“方法限制用于调度程序的线程。

示例:

代码语言:javascript
运行
复制
// 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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58489659

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档