(19)国家知识产权局
(12)发明 专利申请
(10)申请公布号
(43)申请公布日
(21)申请 号 20221094319 9.6
(22)申请日 2022.08.08
(71)申请人 浪潮云信息技 术股份公司
地址 250100 山东省济南市高新区浪潮路
1036号浪潮科技园S01号楼
(72)发明人 薛小珊
(74)专利代理 机构 济南信达专利事务所有限公
司 37100
专利代理师 阚恭勇
(51)Int.Cl.
G06F 9/46(2006.01)
G06F 9/50(2006.01)
(54)发明名称
一种同步请求的异步并发系统
(57)摘要
本发明提供一种同步请求的异步并发系统,
属于同步请求领域, 本发明包括多线程池设计、
Future‑Callback机制、 CountDownLatch计数器、
同步等待回调机制。 基于Cou ntdownLatch机制初
始化多个线 程池的调度与同步返回, 基于java的
ExecutorService初始化线程池, 线程池内使用
Future‑Callback机制完成池内多线程的同步等
待。 本系统的实现主要适用于分组事务隔离处
理, 规划多线 程池执行, 并通过池内Future等待+
池间计数器调度实现高性能同步请求的处理与
返回。
权利要求书1页 说明书3页 附图1页
CN 115408114 A
2022.11.29
CN 115408114 A
1.一种同步请求的异步并发系统, 其特 征在于,
包括, 数个线程池、 Future ‑Callback机制、 CountDo wnLatch计数器、 同步 等待模块;
数个线程池: 同步启动且进行事务分组隔离;
Future‑CallBack机制: 单事务的线程池内通过Future任务实现异步执行, 同时通过
CallBack机制+future.get()同步 等待单线程的执 行完成;
CountDownLatch计数器: 对于隔离的线程池之间通过CountDownLatch机制进行调度,
每次执行1个线程池完成则countDown()进行计数器减1操作, 待所有线程池执行完成则恢
复await断点执 行;
同步等待模块: 线程池内通过Future.get完成同步等待, 各线程池通过await()等待同
步返回。
2.根据权利要求1所述的系统, 其特 征在于,
基于CountdownLatch初始化线程池的调度与同步返回, 基于j ava的ExecutorService
初始化线程池, 线程池内使用Future ‑Callback机制完成池内多 线程的同步 等待。
3.根据权利要求2所述的系统, 其特 征在于,
对于事务或数据进行分组划分, 分数组等同于线程池的数量。
4.根据权利要求3所述的系统, 其特 征在于,
对线程池进行分组隔离并发执 行; 线程池同步执 行, 每个线程池执 行1个事务。
5.根据权利要求2所述的系统, 其特 征在于,
CounDownLatch初始值为线程池的数量, 线程池初始化后 执行await()等待, 每个线程
池执行完成执行countDown()进行计数器减1, 直至计数器=0从await()等待节点处继续
执行。
6.根据权利要求2所述的系统, 其特 征在于,
基于java的ExecutorService 方式创建线程池。
7.根据权利要求6所述的系统, 其特 征在于,
基于CountdownLatch机制初始化线程池的调度与同步返回, 基于java的
ExecutorService初始化线程池, 线 程池内使用Future ‑Callback完成池内多线程的同步等
待。
8.根据权利要求2所述的方法, 其特 征在于,
工作流程如下:
1)同步请求进入后, 系统进行初始化, 首先获取待 处理全部事务分成N组(N>1), 初始化
CountDownLatch容器的初始值为N, 同时初始化N个线程池, 触发N个线程池的执行, 并执行
CountDownLatch.await()等待返回执 行;
2)线程池通过java的ExecutorService进行线程与等待队列的初始化, 单个线程通过
Future‑Callback实现, 通过Future.get()方式等待单线程完成, 待线程池内线程均执行
完成后, 触发CountDo wnLatch.countDo wn(), 进行计数器 ‑1;
3)待N个线程池均执行完成后, 执行了N次CountDownLatch.countDown(), 此时计数器
的数值为0, 触发CountDownLatch.await()处的等待逻辑继续执行, 此处逻辑为进行返回
事务结果的收集与转换, 并进行同步返回。权 利 要 求 书 1/1 页
2
CN 115408114 A
2一种同步请求的异步并发系统
技术领域
[0001]本发明涉及同步请求 技术领域, 尤其涉及一种同步请求的异步并发系统。
背景技术
[0002]伴随着互联网技术的飞速发展和软件复杂度的提高, 一些同步请求不但事务越来
越复杂, 同时对性能要求越来越高。
[0003]复杂事务的同步处理的实现方案有多种, 选择一种高性能架构是一种紧迫诉求。
下面是一些最常用的实现技 术:
[0004]1)硬件方式提速: 通过不断提升CPU+内存的硬件性能提高执行效率, 但是基于业
务逻辑本身的限制, 很多场景并不能良好的提高执 行效率
[0005]2)通过Kafka等方式异步实现: 同步实现进行生产者、 消费者模式拆分, 对于部分
同步要求不高的场景如购物下单的后续流程有良好效果, 但是对于严格实时等待的机制无
法良好的处 理;
[0006]单层线程池处理: 将事务拆分到线程池的单个线程执行, 对于简单场景有一定效
率提升, 但是对于复杂分层结构处理不好, 不便于扩展与事务隔离, 比如一个请求要调用多
个组织机构, 每 个组织机构要出发多个请求。
发明内容
[0007]为了解决以上技术问题, 本发明提供了一种同步请求的异步并发系统。 选择使用
双层异步架构实现同步事务返回: 首先不依赖于硬件的提速, 能做到底层解耦; 能够保持严
格等待, 避免方案2的纯异步架构; 另外, 进行分层隔离处 理复杂事务, 架构清晰, 便 于扩展。
[0008]本发明的技 术方案是:
[0009]一种同步请求的异步并发系统, 包括多线程池设计、 Future ‑Callback机制、
CountDownLatch计数器、 同步 等待回调机制。
[0010]本发明基于CountdownLatch机制初始化多个线程池的调度与同步返回, 基于
java的ExecutorServic e初始化线 程池, 线程池内使用Future ‑Callback机制完成池内多线
程的同步 等待
[0011]其中:
[0012]1)多线程池设计: 同步启动多个线程池进行事务分组隔离, 相互不影响;
[0013]2)Future ‑CallBack机制: 单事务的线程池内通过Future任务实现异步执行, 同时
通过CallBack机制+future.get()同步 等待单线程的执 行完成;
[0014]3)CountDownLatch机制: 对于多个隔离的线程池之间通过CountDownLatch 机制
进行调度, 每次执行1个线程池完成则countDown()进行计数器减1操作, 待所有线程池执
行完成则恢复await断点执 行;
[0015]4)同步等待回调: 线程池内通过Futur e.get完成同步等待, 多个线程池通过await
()机制等待同步返回。说 明 书 1/3 页
3
CN 115408114 A
3
专利 一种同步请求的异步并发系统
文档预览
中文文档
6 页
50 下载
1000 浏览
0 评论
309 收藏
3.0分
温馨提示:本文档共6页,可预览 3 页,如浏览全部内容或当前文档出现乱码,可开通会员下载原始文档
本文档由 人生无常 于 2024-03-18 13:07:59上传分享