协程Dispatchers.IO上下文限制为64个线程。在高并发系统中,这还不足以可靠地与阻塞代码进行交互。

Documentation states表示:



我想将kotlinx.coroutines.io.parallelism系统属性更改为其他内容。但是,如果我只是这样做:

adb shell "setprop kotlinx.coroutines.io.parallelism 1000"

然后我得到以下结果:
setprop: failed to set property 'kotlinx.coroutines.io.parallelism' to '1000'

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

因此,在这种情况下,我有三个问题:
  • 文档中暗示的属性确实是我尝试更改的“系统属性”吗?
  • 如何为我的应用程序的所有用户在非root用户的设备上更改此属性?
  • 还有更好的选择吗?

  • P.S.我知道,如果仅使用协程而不阻塞代码,那么(可能)就不会有问题了。但是,让我们假设我需要使用阻塞调用(例如,遗留Java代码)。

    最佳答案

    IO_PARALLELISM_PROPERTY_NAME不是指Android系统属性,而是 Java系统属性。只需在您的应用中尽早添加此代码,例如首先在Application.onCreate()中,将其更改为1000:

    import static kotlinx.coroutines.DispatchersKt.IO_PARALLELISM_PROPERTY_NAME;
    
    System.setProperty(IO_PARALLELISM_PROPERTY_NAME, Integer.toString(1000));
    

    不必使用root或类似的东西在每个设备的基础上完成。由于它是使用常规应用程序API的常规应用程序代码,因此它可以在任何地方使用。

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

    09-05 02:47