0

我正在开发一个小型多线程应用程序(在 java 中)来帮助我理解它。当我对此进行研究时,我了解到您希望处理器支持的理想线程数量(我认为,英特尔 i3 中为 4 个,英特尔 i7 中为 8 个)。但是单独的 swing 已经有 3 个线程 + 1 个线程(在这种情况下是主线程)。这是否意味着我在支持 4 线程的处理器上不会有任何重大改进?摆动线程会只消耗所有处理器线程,而其他一切都将只在同一个处理器上运行吗?即使使用那些摆动线程,是否值得多线程(性能方面)?

OBS:可能需要做的一个重要观察是,我将使用 JFrame 并进行主动渲染。这可能是我会用挥杆去的。

4

5 回答 5

3

大多数线程做的第一件事就是等待。他们就在那里,所以他们准备好在系统需要他们的服务的那一刻开始。

关于理想线程数的评论适用于 100% 工作负载下的线程数。

于 2012-07-12T16:15:00.173 回答
3

我了解到您希望处理器支持的理想线程数量

Thread仅当您的 s 占用整个 CPU时,该声明才成立。例如 Swing 线程(Event Dispatch Thread)大部分时间只是在等待用户输入。

于 2012-07-12T16:15:54.203 回答
3

Swing 的线程花费大量时间处于空闲状态。理想的线程数是以或接近 100% 处理器时间执行的线程。由于其他因素,您可能仍然看不到显着的改进,但摆动中固有的线程不应该是一个问题。

于 2012-07-12T16:18:55.260 回答
2

是的,他们这样做,但只是最低限度。还有其他线程,例如 GC 和终结器线程,它们也在后台运行。这些都是 JVM 运行所必需的,就像 Swing 线程是 Swing 工作所必需的一样。

除非您在一个资源或 CPU 容量极少的非常小的系统上,否则您不必担心它们。

对于现代系统,其中许多具有多个处理器和/或多个内核,JVM 和操作系统将在其他处理器上运行这些其他线程,并且仍然为您的用户线程提供您需要的所有处理器能力。

此外,大多数后台 Swing 线程都处于等待循环中,等待处理事件并进行显示更改。除非您做错了什么,否则它们应该构成您的应用程序处理器需求的一小部分。

我了解到您希望处理器支持的理想线程数量

正如@Robin 提到的,这仅在您尝试优化具有许多 CPU 绑定操作的程序时才有必要。例如,我们的应用程序通常有 1000 多个线程,但有 8 个处理器,并且仍然非常敏感,因为线程都在等待 IO 或事件。唯一需要担心 CPU 数量的情况是在执行处理器密集型操作并尝试最大化吞吐量时。

于 2012-07-12T16:14:47.900 回答
2

理想的线程数不一定由您拥有的 CPU(核心)数决定。根据您正在执行的实际代码,涉及很多调整。

例如,让我们以 Runnable 为例,它执行一些数据库查询(不管是什么)。大部分线程时间将被阻塞等待来自数据库的响应。因此,如果您有 4 个内核,并执行 4 个线程。很可能在任何给定时间,它们中的许多都在 db 调用中被阻塞。您可以轻松地生成更多线程,而不会对您的 cpu 产生不良影响。在这种情况下,您不受机器规格的限制,而是受到数据库将处理的并发程度的限制。

另一个例子是文件 I/O,它花费大部分时间等待 I/O 子系统响应数据。

唯一真正的方法是评估您的多线程代码,以及针对给定环境的反复试验。

于 2012-07-12T16:25:03.000 回答