当前位置: 首页 > 面试题库 >

如何在Java并行程序中获得理想数量的线程?

闻人修平
2023-03-14
问题内容

我需要在批处理程序中获得理想数量的线程,该程序在支持并行模式的批处理框架中运行,例如Spring Batch中的并行步骤。

据我所知,太多的线程无法执行程序的步骤是不好的,这可能会对程序的性能产生负面影响。某些因素可能会导致性能下降(使用共享资源(锁定,同步..)时的上下文切换,竞争条件…(还有其他因素吗?)。

当然,获得理想线程数的最好方法是对我进行实际的程序测试,以调整程序的线程数。但是在我的情况下,进行实际测试并不容易,因为测试需要很多东西(人员,测试计划,测试数据等),这对于我现在来说太难了。因此,在获得实际html" target="_blank">测试之前,我想尽可能地了解获得程序的理想线程数量的方法。我应该考虑什么才能获得程序的理想线程数(步数)?CPU核心数?运行我的程序的计算机上的进程数?数据库连接数??在这种情况下是否存在诸如公式的合理方式?


问题答案:

最重要的考虑因素是您的应用程序/计算是CPU约束还是IO约束。

  • 如果是IO受限的(单个线程将大部分时间都花在等待外部资源,例如数据库连接,文件系统或其他外部数据源上),那么您可以分配(许多)线程数多于可用处理器的数量-当然,有多少还取决于外部资源的扩展能力-本地文件系统,可能性不大。
  • 如果(主要是)CPU限制,那么最好是稍微超过可用处理器的数量。


 类似资料:
  • 我是Java新手。在发布这个问题之前,我已经搜索了这个网站。如果我的问题看起来很愚蠢,请原谅我。 下面给出了我正在寻找答案的代码。 我打算让4名选手参加100米赛跑。主线程以最高优先级运行,因此它可以检查每个玩家的进度。我在主线程和子线程中都编写了Yield方法,认为主线程和子线程都将获得相当多的CPU时间。 该程序为每次运行产生以下三种不同的输出。 > 它产生"Gun is Fired"消息,之

  • 问题内容: 众所周知,Java ArrayList是使用数组实现的,并以10的容量进行初始化,并将其大小增加50%。如何获得当前ArrayList的容量而不是ArrayList的大小。 谢谢 问题答案: 我认为这是不可能的。您的用例是什么?我相信C#ArrayLists具有属性,但是Java ArrayList类不会公开此信息。 您具有接受初始容量参数的构造函数,并且具有可用于减少增量重新分配量的

  • 问题内容: 如何查看Java进程中的线程数? 问题答案: 调试Java程序的有用工具,它提供了线程数和其他有关线程的信息:

  • 我正在尝试用Mono中的值填充Flux中的对象。当我尝试这样做时,它只是忽略了我的“设置”操作。我假设这是因为Flux正在并行工作,而Mono没有。我该如何解决这个问题? 以下是一些日志 如您所见,我正在尝试将国家代码设置为代理。

  • 问题内容: 根据我一直在阅读的定义: 线程基本上是并发(同时)运行的代码段 。 但是,如何在存在线程调度程序的情况下同时运行它们? 我读到,线程调度程序基本上是从线程池中随机选择一个线程在某个时刻运行。从中我得到一个确切的时间点,只有一个可运行线程真正处于运行状态(运行)。( 所有这些均来自SCJP Sun认证程序员学习指南 )有人可以澄清吗? 这些线程是否真正同时运行? 问题答案: 但是,如何在

  • 我正在使用jeter分布式环境并在多台从机上分配负载。我正在运行 中,图表仅显示一个从机线程数,而不是x轴上的组合线程数。 例如,如果我的从机1和从机2各运行10个线程,但生成的图表显示X轴上有10个活动线程,但应该是20个。