图1.背景简绍
图2
图3
总结: 图1到图3说明cpu 根据摩尔定律,随机主频的不断提高,软件不需做任何改变就能得到性能的提升。但是到达一定的时间主频已经到达极限,没有办法再提升了,只能依靠 增加cpu 核数来提高性能了。但是实际中的情况是,生产商可以加更多的核数,公司也可以买更多的核数,但是,软件缺没有做好准备, fork-join 闪亮登场了。这个时候只能通过改变代码来实现性能的提高。
图4
随着硬件的发展,软件也不断完善,尤其是java
图5
并发和并行的理解。并发是cpu间的切换,并行是同时执行。 并发要抢资源。不管是并发还是并行都是最大化cpu利用率.
图6
图7
图8
图9
总结:图7到图9 采用单线程的模式来解决这个数组相加的问题。
图10
图11
33行构建20万长度的数组,34 行 算出线程数,37 行创建一个固定线程池的。 39行求和; 创建两个数组,一个是任务数组tasks,一个是求和的结果数组sums,大小为线程数。 遍历线程数,提交任务 提交任务的传参数为数组的开始值,和结束值,和数组。分段例如 0到1000交给一个线程处理,1000到2000交给一个线程处理。 最后sums数组接收值,再次遍历累加。图13
图12
图13
总结:图11到图13 使用并发框架来实现多核cpu的数组求和功能。思想是
图14
能不能想图14这样再次分段。