当前位置: 首页 > 知识库问答 >
问题:

如果程序不等待用户输入/系统资源,那么线程在Java中有什么用

龙星辰
2023-03-14

我有一个一般性的问题:

我的程序将继续处理一些不需要用户输入或系统资源的东西(如打印机等)也就是说,我的程序不会等待任何资源,除了CPU时间。

同一个程序(比如作业)可以由多个用户启动。

在这种情况下,在一个线程中运行它是值得的吗(这意味着每个用户都会感觉到他的作业没有延迟地被执行。还是按顺序运行作业更好?

作为单独的线程运行的问题是,同时运行的线程太多,迫使CPU利用率超过100%。

请建议。假设用户没有看到他的作业进度。用户不担心当他的工作完成。但同时,我想让CPU忙于运行作业。

共有2个答案

孔彭祖
2023-03-14

如果线程是真正纯粹的CPU绑定的,那么创建的线程比可用于处理它们的核(或虚拟核)多是没有意义的。因此,在四核机器上,创建的线程不超过四个(可能只有三个,因为您的进程不是机器上唯一在运行的东西)。在具有超线程(每个核心两个虚拟线程)的四核计算机上,您可能会创建六个或七个线程。创建过多的额外线程(例如,数百个线程)会导致不必要的上下文切换,如果真的太多的话,这可能会非常昂贵。

反之则是在多核机器上,单线程只能在一个核上运行。因此在四核机器上,在单个线程上顺序运行作业只会占用25%的CPU容量。

因此:并行运行作业,直到可用内核的数量为止,超过这个数量后再依次运行(在每个内核上)。

很大的警告:你的里程数可能会有所不同。这个等式有很多输入,包括机器上还发生了什么,特别是作业是否真的是CPU绑定的(与系统绑定的相反,例如CPU和I/O子系统等)。

郑正文
2023-03-14

如果您不关心一个进程需要多长时间,或者它需要的时间长度是可以接受的,那么使用一个线程很可能是最简单的解决方案。例如,许多GUI应用程序只使用一个事件处理线程。

如果想让所有CPU都忙,可以启动多个busy循环来最大限度地占用所有CPU。

您通常希望的是减少延迟,或者通过使用更多的CPU来改进threadput。除非这是一个目标,否则使用更多的CPU不会对你有帮助。

 类似资料:
  • 我想暂停在JavaFX应用程序线程上执行方法并等待用户与UI交互。不要冻结UI很重要。 例子: 我应该如何实现< code>pause()和< code>resume()方法?< br >事件处理程序的执行应在< code>pause()处等待;调用,直到用户按下< code>resume按钮并且调用< code>resume方法。

  • 问题内容: 为什么线程不等待?线程启动,然后进入等待池,但是在那一刻之后它将继续执行。 问题答案: 您正在线程对象本身上进行同步,这是错误的用法。即将发生的事情是,即将死去的执行线程总是调用其对象: 依赖于this。因此,很清楚为什么在其中有或没有自己的情况下都会得到相同的行为。 解决方案:使用单独的对象进行线程协调;这是标准做法。

  • 问题内容: 我正在阅读Caleb Doxsey的Go书,我对http://www.golang-book.com/4有两个疑问 我想知道为什么在第二个Scanf之后程序没有停止并等待用户输入?以及如何测试用户是否输入了整数和/或没有留空? 问题答案: 这是发行5391::拒绝在Windows上线的末端。 作为一种解决方法,要检查输入是否有效,请编写, 和 解决方法是格式字符串中的换行符。 包 功能

  • 问题内容: 我的问题: 当线程处于状态(非休眠)> 99.9%的时间时,JVM中的大量线程是否会消耗大量资源(内存,CPU)吗?当线程正在等待时,如果根本需要维护它们,需要花费多少CPU开销? 答案是否也适用于与非JVM相关的环境(例如linux内核)? 内容: 我的程序收到大量占用空间的程序包。它在不同的程序包中存储相似属性的计数。在收到包裹后的给定时间(可能是数小时或数天)之后,该特定包裹将过

  • 在下面的代码中,为什么主线程要等到子线程完成。 Driver.java ThreadRunner.java 调用“t.start()”后,在驱动程序类中,程序是否应该退出?我没有使用join,但主线程仍在等待,直到新旋转的“ThreadRunner”运行开始。这是因为在java中,主线程(由main方法启动)总是等待所有线程关闭吗?

  • 问题内容: 我有一个线程类“ MyThread”和主应用程序,简称为“ Gui”。我想从线程类创建一些对象,但在本示例中,我仅创建了一个对象。线程类完成一些工作,然后向Gui类发出信号,指示需要用户输入(此指示目前仅是更改按钮的文本)。然后,线程应等待用户输入(在这种情况下为单击按钮),然后继续执行其操作… 如何在(多个)线程中等待用户输入? 问题答案: 默认情况下,具有事件循环,可以处理信号和插