gpt4 book ai didi

java - ThreadPoolExecutor 更多线程=较慢的 android

转载 作者:太空宇宙 更新时间:2023-11-03 12:55:27 24 4
gpt4 key购买 nike

   BlockingQueue<Runnable> queue = new LinkedBlockingQueue<Runnable>();
ThreadPoolExecutor ex = new ThreadPoolExecutor(1,1, 1L, TimeUnit.MINUTES, queue);

final HashMap<String,Response> responses = new HashMap<String,Response>();

ex.execute(new Runnable() {
@Override
public void run() {
android.os.Process.setThreadPriority(Process.THREAD_PRIORITY_MORE_FAVORABLE);
Response response = getService().getProducts();
responses.put("1",response);


}
});
....
....

...


ex.shutdown();
ex.awaitTermination(1000, TimeUnit.DAYS);
long time2 = System.currentTimeMillis();

我提出了很多请求,希望在完成时得到通知。

在带有 1 个线程的 ThreadPoolExecutor 的旧设备上测试 android 2.3 gingerbead 需要 1-1.2 秒。使用 4 个线程需要多得多的 4-5 秒!

在 galaxy 选项卡 3 上进行测试,一个线程需要 100 毫秒,而 4 个线程需要 60 毫秒。

为什么会这样??

最佳答案

无论您创建多少线程,您的处理器中的物理核心数都是有限的。

较旧的设备可能只有一个内核,因此随着线程的增多,它必须不断地在线程之间跳转以处理它们。

新设备有多个内核,因此可以将线程分布在它们之上并并行运行。

一般来说,对于密集型任务,您启动的线程永远不应超过您拥有的核心数。对于只偶尔运行的任务,更多线程可能没问题,但像 ScheduledExecutor 后面有一个线程池这样的东西仍然会更好。

关于java - ThreadPoolExecutor 更多线程=较慢的 android,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21074981/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com