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

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

冯通
2023-03-14

Im使用线程池来执行任务,这些任务主要是基于cpu的,带有一点I/O,大小比cpu的数量大一个。

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

假设一个简单的程序将它的所有任务提交给这个执行器,而不做其他的事情,我假设有一个更大的线程池会使事情变慢,因为操作系统必须对它进行时间限制,CPU更经常地给线程池中的每个线程一个运行的机会。

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

共有1个答案

林子石
2023-03-14

如果有CPU约束的任务,随着线程数量的增加,系统开销会增加,性能也会降低。注意:拥有比等待任务更多的线程只是浪费资源,但可能不会使任务变得如此慢。

我会使用CPU数量的倍数(例如1或2),而不是只加一个,因为有太多的线程会有惊人的开销。

 类似资料:
  • 问题内容: 我使用线程池来执行任务,这些任务大多基于cpu并带有一点I / O,其大小比cpus的数量大一倍。 假设有一个简单的程序将所有任务提交给该执行程序,并且几乎没有做其他事情,那么我认为拥有更大的线程池会减慢速度,因为操作系统必须对它进行cpus切片,才有机会给线程池中的每个线程分配机会。跑。 是正确的吗,如果是这样,这是一个实际问题还是主要是理论问题,即如果我将线程池大小增加到1000,

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

  • 有一个固定的线程池(让它与size=100),我想使用我的应用程序的所有任务。它用于限制服务器负载。 Task=web爬虫,它向线程池提交第一个作业。 该作业可以生成更多作业,以此类推。 一个作业=一个HTTP I/O请求。 谢谢!

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

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