并发是提升程序性能的利器。
并发提升程序性能的关键是提高计算机硬件的利用率。
在大多数情况下,我们并没有充分利用我们的硬件资源。
合理的增加运行线程就是一个方法。
异步编程是其中的重要手段,同步的方式,或者说串行的方式效率低下。
我们需要识别出系统中可以并行的部分,并将其并行化。
Example
对于下载库操作,我们需要更新commit表,也需要更新account人员信息,而这两部分可以并行。
使用CompletableFuture进行异步处理,最后合并通知下载完成可以扫描。
CompletableFuture<Void> insertCommit =
CompletableFuture.runAsync(()->{
commitDao.batchInsertCommit(commitList);
updateLatestCommitTime(repo);
});
CompletableFuture<Void> updateAccount =
CompletableFuture.runAsync(()->{
HashSet<String> accountSet = new HashSet<>();
for(Commit commit: commitList){
accountSet.add(commit.getDeveloper());
}
updateAccount(repoUuid, accountSet);
});
insertCommit.thenCombine(updateAccount, (__, tf)->{
scanStart(repoUuid, repo.getBranch());
return __;
});