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

Java中基于cpu的简单程序运行任务的最佳线程池大小是多少

郗奇玮
2023-03-14
问题内容

我使用线程池来执行任务,这些任务大多基于cpu并带有一点I / O,其大小比cpus的数量大一倍。

Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors() + 1)

假设有一个简单的程序将所有任务提交给该执行程序,并且几乎没有做其他事情,那么我认为拥有更大的线程池会减慢速度,因为操作系统必须对它进行cpus切片,才有机会给线程池中的每个线程分配机会。跑。

是正确的吗,如果是这样,这是一个实际问题还是主要是理论问题,即如果我将线程池大小增加到1000,我会注意到巨大的差异。


问题答案:

如果您有CPU约束的任务,则随着线程数量的增加,开销会增加,性能也会降低。注意:拥有比正在等待的任务更多的线程只会浪费资源,但可能不会使任务减慢太多。

我将使用cpus数量的倍数(例如1或2),而不是仅添加一个,因为拥有太多线程会产生令人惊讶的开销。



 类似资料:
  • Im使用线程池来执行任务,这些任务主要是基于cpu的,带有一点I/O,大小比cpu的数量大一个。 假设一个简单的程序将它的所有任务提交给这个执行器,而不做其他的事情,我假设有一个更大的线程池会使事情变慢,因为操作系统必须对它进行时间限制,CPU更经常地给线程池中的每个线程一个运行的机会。 这是正确的吗?如果是,这是一个真正的问题还是主要是理论上的问题,即如果我将线程池大小增加到1000,我会注意到

  • 本文向大家介绍Java 使用线程池执行多个任务的示例,包括了Java 使用线程池执行多个任务的示例的使用技巧和注意事项,需要的朋友参考一下 在执行一系列带有IO操作(例如下载文件),且互不相关的异步任务时,采用多线程可以很极大的提高运行效率。线程池包含了一系列的线程,并且可以管理这些线程。例如:创建线程,销毁线程等。本文将介绍如何使用Java中的线程池执行任务。 1 任务类型 在使用线程池执行任务

  • 本文向大家介绍Spring Boot中配置定时任务、线程池与多线程池执行的方法,包括了Spring Boot中配置定时任务、线程池与多线程池执行的方法的使用技巧和注意事项,需要的朋友参考一下 配置基础的定时任务 最基本的配置方法,而且这样配置定时任务是单线程串行执行的,也就是说每次只能有一个定时任务可以执行,可以试着声明两个方法,在方法内写一个死循环,会发现一直卡在一个任务上不动,另一个也没有执行

  • 问题内容: 我想启动许多要在+ -42Mio记录的数据库上运行的任务。我想批量运行5000条记录/时间(结果是850个任务)。我还想将线程数限制为16个,因此Java开始为我执行此操作,并且我正在使用当前代码来完成此任务: 这是正确的方法吗?特别是当我有一种印象,即Java会触发所有任务…(实现) 问题答案: 使用ExecutorService的第一部分看起来不错: 带有Thread的部分不应该在

  • 我正在创建一个可以监视100-150个设备的监视应用程序...现在要设计一个监视器应用程序,我有两种方法: > < li> 为每个要监控的设备创建一个线程,每个线程将ping(使用ICMP)设备以了解设备是否在线。这些线程将无限期地运行,以便在特定的时间间隔(比如60秒)后了解它们的状态。 创建一个线程池,并为每个设备提交一个任务到一个线程池。任务是简单地 ping 到设备。因此,在当前设计中,任