【发布时间】:2018-08-02 08:00:17
【问题描述】:
like - 网络操作和位图操作图像加载和其他类型的工作我可以为我的整个应用程序创建一个 TheadPoolExecuter 并在其上执行。
如果答案是否定的 -> 为什么?以及如何为每个操作创建thread pool?
或者如果是 -> 是否出现性能问题?
提前致谢。
【问题讨论】:
-
我可以为我的整个应用程序创建一个单独的 TheadPoolExecuter 并在其上执行吗 可以,事实上我已经看到 Google 示例的源代码使用了这种方法。跨度>
-
Enzkie 我也看到了它们,但我的困惑并不清楚,因为谷歌样本使用两个 thead 池,一个用于解码,第二个用于下载。那么为什么 google 使用两个线程池中的一个。?
-
IMO 他们这样做是因为他们希望将长时间运行的任务与那些更快完成的任务隔离开来。想象一下,您的池中有 4 个线程,突然有 4 个繁重的网络请求首先加载到池中,而一个简单的数据库查询当前处于挂起状态,在这种情况下会延迟简单的请求。
-
@Enzokie 定义差异的更好方法是 CPU 绑定任务与阻塞任务。您当然需要一个线程池来处理所有受 CPU 限制的工作。对于阻塞调用,您需要更多线程什么都不做。但是,在 Android 上,您应该避免阻塞网络 API。
-
@MarkoTopolnik 感谢您的帮助。
标签: java android performance kotlin