ForkJoin框架原理

任务性质类型

CPU密集型

CPU密集型也叫计算密集型,系统的硬盘、内存性能相对于CPU会好很多,此时系统运作大部分的状况是CPU Loading 100%、CPU要读写I/O(硬盘、内存),I/O在很短的时间内就可以完成,而CPU还有许多运算要处理,CPU Loading很高。

在大部分系统中,大部分时间用来做计算、逻辑判断等CPU动作的程序成为CPU bound。

CPU bound的程序一般CPU使用率比较高。这可能是任务本身不太需要访问I/O设备,也可能是程序是由多线程实现减少了等待的时间。

线程数=CPU核数+1

 

IO密集型

指的是系统的CPU性能相对于硬盘、内存要好很多,此时,系统运作大部分状况是CPU在等待IO(硬盘、内存)读写操作,此时的CPU Loading不高。

线程数=(线程等待时间+CPU执行时间)/CPU执行时间*CPU核数

 

什么是ForkJoin框架?

ForkJoin是java1.7才引入的,由大神Doug Lea写的。提供了一个用于并行执行任务的框架,把一个大任务分割成若干个小任务,最终汇总每个小任务结果后得到大任务结果的框架。

Fork/Join特性:

ForkJoinPool并不是为了取代ExecutorService,而是对它的补充,某些场景下使用Fork/Join更合理

工作窃取算法

 

ForkJoin源码分析

ForkJoinPool构造器参数:

parallelism:池子中工作线程数
factory:线程工厂
handler:内部运行错误处理
asyncMode:每个工作线程都有一个独立的队列,表示工作线程内的任务队列是采用何种方式进行调度,可以是先进先出,也可以是后进先出,如果为true,则是先进先出,默认是false

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值