本讲主要结合实际应用,来封装一个集合并行处理组件,我们的集合分为数据库查询出现的分页集合;还有一个是内存的集合,今天主要说一下内存集合的并行处理。
场景介绍
- 有一个比较耗时的工作,将top 400的用户的行为信息统计
- 统计的信息来自很多业务,很多服务,不能使用聚合直接计算
- 这些业务统计的时间,大概每个人平均需要1秒
- 这些用户的各种类型,彼此独立,没有关系
如何设计
如果直接顺序写代码,那1万的用户,需要400秒的时间,这是我们不能接受的,我们使用并行编程8秒就把它搞定。
如何实现
- 400的集合,进行拆分,每100个为一组,分为4组(4页)
- 对每100个集合进行拆分,每2个为1组,将100个分成了50组
- 对50组数据,开50个线程并行处理,结果为2行完成
- 400的信息,分成了4页,每页2秒,一共8秒
代码实现
/**
* 数据集并行处理工具
*/
public class DataHelper {
/**
* 并行处理线程数字
*/
static final int THREAD_COUNT = 50;
/**
* 单线程中处理的集合的长度,50个线程,每个线程处理2条,如果处理时间为1S,则需要2S的时间.
*/
static final int INNER_LI