在定时任务开始执行的时候,CPU都会忽然飙高,但是平时的时候定时任务的资源呦没有被用到,为了更好的发挥我们的性能,我们就把每个任务里不同的groupId下的任务平摊到这个时间段里去执行,分散在执行任务那一下资源占用的问题。
轮询算法:
/**
* 把groupId平均分到区间每个时段
* @param groupIds
* @return Pair<Map<Integer, List<Integer>>, Integer> key:平均分的grouId,value:时间轮大小(单位:s, 最小间隔60s)
*/
public Pair<Map<Integer, List<Long>>, Integer> getAvgSegmentGroupInfo(List<Long> groupIds, String beanName) {
int groupCount = groupIds.size();
Integer jobRange = xxxConfig.getJobRangeTime().get(beanName);
// 时间轮大小, 单位:s, 最小间隔60s
int wheelSize = groupIdCount > jobRange ? 60 : (jobRange * 60 / groupIdCount);
// 时间轮数量
int wheelCount = jobRange * 60 / wheelSize;
// 每次执行数量
int rangeCount = groupIdCount < wheelCount ? 1 : groupIdCount / wheelCount;
// 平均分
Map<Integer, List<Long>> groupMap = new HashMap<>();
if (groupIdCount <= wheelCount) {
for (int i = 0; i < groupIdCount; i ++) {
groupMap.put(i, Arrays.asList(groups.get(i)));
}
} else {
Integer index = 0;
for (int i = 0; i < wheelCount; i +

754

被折叠的 条评论
为什么被折叠?



