🍹框架对比
市面主流并发编程框架有如下几款产品:
# 使用工具
# 测试阶段
1、使用动态线程池框架设置 核心线程数:100 最大线程数 100 2、jmeter线程数 120 线程 3、jmeter 运行时长 33s 4、测试机器: mac m1 16G
# 线程池配置如下
# 测试结果
# gobrs-async
jmeter测试结果
线程池运行状态
可以看到 gobrs-async 在120个压测线程,核心线程数和最大线程数在100的情况下, 线程池负载和核心线程数、最大线程数并没有到达瓶颈,活跃线程数维持在70-80 之间。降低了线程切换带来的开销同时节省了线程数的开销。
# liteflow
jmeter测试结果
线程池运行状态
可以看到liteflow线程池的最大线程数量和线程池负载已经触发了最大线程数 100 的限制。
看一下线程使用情况
主线程使用http-nio-9999-exec-4
2022-12-11 15:11:54.936 INFO 12074 --- [nio-9999-exec-4] com.yomahub.liteflow.core.FlowExecutor : slot[0] offered
2022-12-11 15:11:54.941 INFO 12074 --- [nio-9999-exec-4] com.yomahub.liteflow.core.FlowExecutor : requestId[7a921ca5265f433a9268a6c14c466ee5] has generated
2022-12-11 15:11:54.942 INFO 12074 --- [nio-9999-exec-4] com.yomahub.liteflow.flow.element.Node : [7a921ca5265f433a9268a6c14c466ee5]:[O]start component[a] execution
使用http-nio-9999-exec-4
a
2022-12-11 15:11:55.090 INFO 12074 --- [lowThreadPool_0] com.yomahub.liteflow.flow.element.Node : [7a921ca5265f433a9268a6c14c466ee5]:[O]start component[b] execution
使用liteflowThreadPool_0
b
2022-12-11 15:11:55.092 INFO 12074 --- [lowThreadPool_1] com.yomahub.liteflow.flow.element.Node : [7a921ca5265f433a9268a6c14c466ee5]:[O]start component[c] execution
使用liteflowThreadPool_1
c
2022-12-11 15:11:55.198 INFO 12074 --- [nio-9999-exec-4] com.yomahub.liteflow.flow.element.Node : [7a921ca5265f433a9268a6c14c466ee5]:[O]start component[d] execution
使用http-nio-9999-exec-4
d
2022-12-11 15:11:55.303 INFO 12074 --- [lowThreadPool_2] com.yomahub.liteflow.flow.element.Node : [7a921ca5265f433a9268a6c14c466ee5]:[O]start component[e] execution
使用liteflowThreadPool_2
e
2022-12-11 15:11:55.303 INFO 12074 --- [lowThreadPool_3] com.yomahub.liteflow.flow.element.Node : [7a921ca5265f433a9268a6c14c466ee5]:[O]start component[f] execution
使用liteflowThreadPool_3
f
完成 taskA->taskB,TaskC->taskD->taskE,taskF
任务流程的执行需要使用 5个线程(包含主线程)。
# asyncTool
因线程池框架与asyncTool 貌似没法完全兼容、调控核心和最大线程池参数对asyncTool不起作用,故不做测试。 不过通过asyncTool 的执行日志可以看出,同样也是一个任务一个线程开启执行。日志如下:
主线程使用http-nio-9999-exec-1
使用pool-13-thread-1
AsyncToolTaskA
使用pool-13-thread-2
AsyncToolTaskB
使用pool-13-thread-3
AsyncToolTaskC
使用pool-13-thread-2
AsyncToolTaskD
使用pool-13-thread-4
AsyncToolTaskE
使用pool-13-thread-5
AsyncToolTaskF
耗时459
完成 taskA->taskB,TaskC->taskD->taskE,taskF
任务流程的执行需要使用 6个线程(包含主线程)。
# 结论
对比结论自行分析,这里就不做过多解释了哈。
其他测试阶段就不再继续测试,感兴趣的小伙伴可以自行下载测试demo (opens new window)进行测试。
Last Updated: 12/11/2022, 4:38:43 PM