IO密集型任务指任务需要执行大量的IO操作,涉及到网络、磁盘IO操作,对CPU消耗较少。 和线程池配置的关系 CPU密集型任务应配置尽可能小的线程,如配置CPU数目+1个线程的线程池。由于IO密集型任务线程并不是一直在执行任务,则应配置尽可能多的线程,如2*CPU数目。 参考: 什么是CPU密集型、IO密集型? 《Java并发编程...
下面是一个 CPU 密集型线程池的自定义实现: importjava.util.concurrent.ExecutorService;importjava.util.concurrent.Executors;publicclassCPUTaskPool{publicstaticvoidmain(String[]args){// 假设我们有 10 个 CPU 密集型任务inttaskCount=10;// 创建固定大小的线程池,大小为 CPU 核心数ExecutorServicecpuThreadPool=...
I/O密集型任务(2N):这种任务应用起来,系统会用大部分时间处理I/O交互,而线程在处理I/O的时间段内不会占用CPU,这时可以将CPU给其他线程使用。因此在I/O密集型任务中,可以多配置一些线程。 但这种用法在实际应用当中是及其不正确的。 线程池的大小不可能只与服务器核心数有关。 ——— 假设应用是CPU与I/O混...
IO密集型 对于IO密集型的应用,就很好理解了,我们现在做的开发大部分都是WEB应用,涉及到大量的网络传输,不仅如此,与数据库,与缓存间的交互也涉及到IO,一旦发生IO,线程就会处于等待状态,当IO结束,数据准备好后,线程才会继续执行。因此从这里可以发现,对于IO密集型的应用,我们可以多设置一些线程池中线程的数量,这样就...
线程上下文切换有代价。IO密集型公式:线程数 = CPU核心数/(1-阻塞系数)阻塞系数一般0.8~0.9,双核CPU理想线程数20,动态线程池看压测情况。 三、1000个并发线程,10台机器,每台机器4核,设计线程池大小 思路:CPU、IO密集型的情况。压测得合理参数配置。线程池动态调整。
Tomcat的默认线程数是多少呢? 它既不是 CPU 的 2 倍,也不是什么其他数值。在某些高并发的服务中,它的核心线程数,可能达到数千甚至上万。对于一个Tomcat来说,它处理的大多数都是I/O密集型的业务,可以说是最好的实践场景。 要明白这个线程数设置的玄机,就必须了解I/O请求的特点。I/O请求不仅仅指的是磁盘读...
当然我们也看到有多种计算公式,但都不是最优解,具体情况需结合项目实际使用,配置合适的线程数 一般来说:文件读写、DB读写、网络请求等都是I/O密集型 特点: 高IO操作 计算操作少 CPU占用率低 四、如何区分IO密集型、CPU密集型任务 我们需要知道某一个任务是否是CPU消耗型的任务(定容线程池),还是说IO类型的任...
CPU密集型和IO密集型与线程池的配置 CPU密集型任务应配置尽可能小的线程,如配置CPU数目+1个线程的线程池。由于IO密集型任务线程并不是一直在执行任务,则应配置尽可能多的线程,如2*CPU数目。
那么这个线程池的数据量是不是可以随便设置呢?当然不是的,请一定要记得,线程上下文切换是有代价的。目前总结了一套公式,对于IO密集型应用: 线程数= CPU核心数/(1-阻塞系数) 这个阻塞系数一般为0.8~0.9之间,也可以取0.8或者0.9。套用公式,对于双核CPU来说,它比较理想的线程数就是20,当然这都不是绝对的,需要根据...