gpt4 book ai didi

java - 等待线程的开销是多少?

转载 作者:搜寻专家 更新时间:2023-11-01 08:38:20 24 4
gpt4 key购买 nike

我正在使用 Android 中的 Volley 库进行 Http 通信。默认情况下,volley 库保留 4 个线程,这些线程从 BlockingQueue 获取 http“请求”对象(请求对象包含所有用于发出 http 请求的详细信息,如 url、http 方法、要发布的数据等)并同时发出 http 请求。当我分析我的应用程序需求时,只有不到 10% 的时间我会同时使用所有 4 个线程,而其余时间我会使用该线程池中的 1 或 2 个线程。所以实际上 2 到 3 个线程将在几乎 90% 的时间内处于 wait() 模式。

所以这是我的问题,1) 处于 wait() 模式的线程的开销是多少,它是否消耗大量的 cpu 周期?让所有这些线程处于等待状态对我来说是个好主意吗?

我假设由于等待线程将在循环中连续检查监视器/锁(内部实现)以唤醒,它可能会消耗大量 cpu 周期来维护等待线程。如果我错了,请纠正我。

谢谢。

最佳答案

  1. What is the overhead of a thread which is in wait() mode

没有。等待线程根本不消耗任何 CPU 周期,它只是等待被唤醒。所以不要打扰自己。

  1. I assume that since a waiting thread will be continuously polling on a monitor/lock internally to wake up ,it might consume a considerable amount af cpu cycles to maintain a waiting thread . Correct me if I am wrong.

那不是真的。等待线程不会对监视器/锁/任何东西进行任何轮询。

大量线程会影响性能的唯一情况是有许多 Activity 线程(远远超过 nr 个 CPU/内核),这些线程经常来回切换。因为 CPU 上下文切换也会带来一些成本。等待线程只消耗内存,不消耗 CPU。

如果你想看看线程的内部实现——我不得不让你失望了。 wait()/notify() 等方法是 native 的 - 这意味着它们的实现取决于 JVM。因此,如果是 HotSpot JVM,您可以查看其源代码(使用 C++/编写并带有一些汇编程序)。

但是你真的需要这个吗?为什么您不想信任 JVM 文档?

关于java - 等待线程的开销是多少?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34716276/

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