`

java并发编程中分配线程池数跟CPU密集型任务和I/O密集型任务有关

    博客分类:
  • java
 
阅读更多
CPU密集型任务:应用主要是使用非常多的cup资源,进行无阻塞的逻辑运算,所以需要避免过多的线程上下文切换。所以线程数范围为:
线程数 = CPU核数+1
也可以设置成CPU核数*2,这还是要看JDK的使用版本,以及CPU配置(服务器的CPU有超线程)。对于JDK1.8来说,里面增加了一个并行计算,计算密集型的较理想线程数 = CPU内核线程数*2
IO密集型任务:是相对于IO操作比CPU计算操作占用更多的CPU时间来说的。如大部分的web应用开发会涉及到大量的网络传输;不仅如此,与数据库或是缓存间的交互也涉及到IO。一旦发生IO,就会使线程处于等待状态,所以我们可以稍微设置多一些线程池中线程的数量,这样就能让在等待IO的这段时间内,线程可以去做其它事,提高并发处理效率。
线程池中线程数范围为:
线程数 = CPU核心数/(1-阻塞系数)
    这个阻塞系数一般为0.8~0.9之间,也可以取0.8或者0.9。以上不是绝对的,需要根据实际情况以及实际业务来调整。

分享到:
评论

相关推荐

    MultiThread_并发_java_线程池_

    1. 根据任务特性选择合适的线程池类型,如CPU密集型任务选择固定大小线程池,I/O密集型任务选择有界的线程池。 2. 设置合理的线程池参数,如核心线程数、最大线程数和队列大小,确保线程池既能高效利用资源,又能...

    Java线程池与ThreadPoolExecutor.pdf

    Java线程池是Java并发编程中的重要组成部分,它允许开发者管理多个线程并有效地调度任务。线程池通过ThreadPoolExecutor类实现,这是一个高度可配置的工具,能够根据具体需求定制线程的创建、管理和销毁策略。 ...

    并发容器和线程池,java并发编程3

    - **高性能**:针对CPU密集型任务进行了优化,特别适合执行大量细粒度的任务。 #### 三、Future `Future`接口提供了获取异步计算结果的能力,它是Java并发编程中重要的API之一。 ##### 3.1 FutureTask `...

    创建Java程序中线程池的详解

    例如,对于CPU密集型任务,线程池的大小可能接近于处理器的核数,而对于I/O密集型任务,线程池可能需要更大,因为I/O操作时线程通常是阻塞的,此时更多的线程可以处理其他I/O请求。 总之,线程池是Java并发编程中...

    如何合理估算 Java 线程池大小:综合指南.pdf

    对于CPU密集型任务,线程池大小应接近CPU核心数,而对于I/O密集型任务,可能需要更大的线程池以充分利用等待I/O操作的时间。 5. **并行处理**:在Java中,可以使用ExecutorService来实现并行处理,将大任务拆分为小...

    线程池详解:线程池七大核心参数、线程池工作原理、线程池的创建方式、线程池的拒绝策略、如何合理分配线程池大小

    1. CPU密集型任务:线程池大小接近CPU核心数,充分利用多核优势。 2. I/O密集型任务:线程池大小可稍大于CPU核心数,因为I/O操作时线程可以切换执行其他任务。 3. 任务特性:根据任务执行时间、并发量等因素综合评估...

    Java并发编程实战.pdf

    《Java并发编程实战》是Java并发编程领域的一本经典图书,涵盖了Java中多线程编程的诸多高级概念和实践技巧。该书不仅介绍了并发编程的基本原理,还包括了各种并发工具的使用方法、常见的并发问题及其解决方案、以及...

    并发-线程池和阻塞队列.pdf

    比如,对于CPU密集型任务,应使用无界队列;而对于I/O密集型任务,则可以使用有界队列,以防止I/O阻塞时任务队列无限增长。 关于阻塞队列,它是一种特殊的队列,在多线程应用中用于线程间传递数据。阻塞队列的一个...

    java并发编程与高并发解决方案

    - 优势:能够显著提升程序的执行效率,特别是对于CPU密集型或IO密集型任务。 - Java中的实现:通过继承`Thread`类或实现`Runnable`接口创建线程。 ### Java并发编程基础 1. **线程安全**: - 定义:当多个线程...

    并发编程库,&&,线程池

    根据CPU密集型或IO密集型任务的特点,选择合适的线程池类型和线程数至关重要。 总之,理解和熟练运用线程池是成为一名高效并发编程者的必备技能。合理使用线程池不仅可以提升系统性能,还能增强程序的可维护性和...

    深入Java多线程和并发编程

    随着互联网应用规模的不断扩大,现代应用面临着高并发请求、CPU密集型操作、I/O密集型处理以及大数据量和计算需求的挑战。为了满足这些需求,开发者需要利用多线程与并发编程来提高程序的响应速度和吞吐能力。通过...

    JAVA集中常用的线程池比较共8页.pdf.zip

    Java线程池是Java并发编程中的重要组成部分,它在多线程环境下的资源管理和任务调度中扮演着核心角色。线程池通过预先创建并管理一组线程,避免了频繁创建和销毁线程带来的开销,提高了系统性能。本文将深入探讨Java...

    java并发编程实践

    Java并发编程涉及对多个线程的管理和协调,使得它们能够有效地共享资源并行执行任务。本文将深入探讨Java并发编程的基础概念、核心机制以及常见应用场景,帮助开发者更好地理解和掌握Java并发编程。 #### 一、并发...

    epoll 多线程 线程池

    线程池是一种线程使用模式,它预先创建了一组线程,当有任务需要执行时,从线程池中取出一个空闲线程来执行任务,完成后线程不被销毁,而是回到线程池中等待下一次任务分配。线程池可以控制系统的资源消耗,避免大量...

    java并发编程面试题分享给需要的同学.docx

    并发编程 并发编程夺命连环问 JUC 什么是死锁?如何避免死锁?...CPU密集型 IO密集型 线程池中阻塞队列的作用是什么?为什么是先添加队列而不是先创建最大线程? 谈谈线程的生命周期?线程有哪些状

    Java并发编程之——Amino框架

    同时,对于需要大量IO操作或计算密集型的任务,Amino的并发管理能够充分利用多核CPU,提高程序的运行效率。 为了更好地理解和使用Amino,我们可以查看提供的源码。cbbs-java-src-0.2.0.tar.gz这个文件包含的就是...

    Java线程池介绍Java开发Java经验技巧共8页.pd

    Java线程池是Java并发编程中的重要组成部分,它在多线程编程中扮演着至关重要的角色,有效地管理和调度线程资源,提高了程序的性能和稳定性。本文将深入探讨Java线程池的概念、工作原理以及如何在实际开发中运用。 ...

    Linux 线程池

    【Linux 线程池】 线程池是操作系统或编程语言中的一种并发处理机制,它...正确地使用线程池,可以避免线程频繁创建和销毁的开销,降低系统资源消耗,提升系统整体性能,尤其对于高并发和I/O密集型应用来说尤为重要。

    java多线程和并发.pdf

    在Java并发编程中,还涉及到多种并发工具类,例如同步容器类和并发容器类。同步容器类使用同步锁来保证线程安全,但可能会影响性能。并发容器类ConcurrentHashMap和CopyOnWriteArrayList等,采用细粒度的锁和弱一致...

    java优化编程 java优化编程 java优化编程

    10. **网络通信优化**:对于网络密集型应用,优化网络通信,如使用NIO(非阻塞I/O)代替BIO,可以提高并发能力,降低延迟。 通过深入理解并实践这些Java优化编程技巧,开发者可以显著提升应用程序的运行效率,减少...

Global site tag (gtag.js) - Google Analytics