Kotlin 协程 与 Java 虚拟线程对比测试(娱乐性质,请勿严谨看待本次测试)

news/2025/2/3 6:46:16 标签: java, kotlin, 娱乐
起因

昨天在群里聊到虚拟线程的执行效率问题的时候虽然最后的结论是虚拟线程在针对IO密集型任务时具有很大的优势。但是讨论到虚拟线程和Kotlin 的协程的优势对比的话,这时候所有人都沉默了。所以有了本次的测试

提前声明:本次测试是不严谨的,仅仅是作为在群里吹水的资本

先说结论(锁定每次并发数量):
  1. kotlin 的 IO 协程调度器与虚拟线程在CPU和内存方面相差无几,但是虚拟线程CPU使用比Kotlin 的协程要低一些
  2. 虚拟线程和Kotlin 的执行效率方面也是相差不大,但是本次测试中,协程的数据要比虚拟线程更好一些
  3. 如果不锁定每次并发数量,虚拟线程应该是比协程更具有优势的,不过这部分没有测试

此外呢,对于单线程上开启多个协程来说,适当的使用 yield 能尽可能的加快执行效率。对比单线程来说提升接近一倍

测试方法

关于测试方法呢,就是在服务器部署一个HttpService ,在本地使用JDK的 HttpConnection 进行并发访问。具体可以查看 GIthub 中的代码,本次代码也是提交到了 Github。点击跳转到Github

GIthub 上的代码参考自 Sulong

本次针对以下的代码进行了测试:

1. useIoCoroutines:使用协程进行I/O操作。
2. useThreadPool:使用线程池。
3. useVirtualThread:使用虚拟线程。
4. useVirtualThreadCoroutines:使用虚拟线程和协程。
5. useMultithreading:使用多线程。
6. useCpuCoroutines:使用CPU协程。
4. useSingleThreadWithCpuCoroutines:使用单线程与CPU协程。
8. useSingleThreadWithVirtualThreadCoroutines:使用单线程与虚拟线程协程。
9. useSingleThreadWithIoCoroutines:使用单线程与I/O协程。
10. useSingleThreadMultiCoroutinesV2:使用单线程与多个协程(版本2 使用 yield)。
11. useSingleThreadMultiCoroutinesV1:使用单线程与多个协程(版本1)。
12. useSingleThread:使用单线程。
测试结果与数据

在这里插入图片描述
结果数据:

Host :  *****
Task count: 3000
Thread count: 128
Test type: 1
Test type name: useMultithreading
Test times: 10
--------------------------------------------------------
Total time: 27405
Average time: 2740.5
Minimum time: 1329
Maximum time: 3685
--------------------------------------------------------
Start Time: 2025-01-25T17:00:33.319160700
End Time: 2025-01-25T17:01:00.733020200
===============================================================


--------------------------------------------------------
Host :  *****
Task count: 3000
Thread count: 128
Test type: 2
Test type name: useThreadPool
Test times: 10
--------------------------------------------------------
Total time: 18926
Average time: 1892.6
Minimum time: 1220
Maximum time: 3812
--------------------------------------------------------
Start Time: 2025-01-25T17:15:23.926063700
End Time: 2025-01-25T17:15:42.868591900
===============================================================

--------------------------------------------------------
Host :  *****
Task count: 3000
Thread count: 128
Test type: 3
Test type name: useSingleThread
Test times: 10
--------------------------------------------------------
Total time: 277412
Average time: 27741.2
Minimum time: 24315
Maximum time: 32107
--------------------------------------------------------
Start Time: 2025-01-25T18:24:34.393491500
End Time: 2025-01-25T18:29:11.812374300
--------------------------------------------------------
===============================================================

--------------------------------------------------------
Host :  *****
Task count: 3000
Thread count: 128
Test type: 4
Test type name: useSingleThreadMultiCoroutinesV1
Test times: 10
--------------------------------------------------------
Total time: 275976
Average time: 27597.6
Minimum time: 20722
Maximum time: 43420
--------------------------------------------------------
Start Time: 2025-01-25T18:15:19.202151800
End Time: 2025-01-25T18:20:39.986969900
--------------------------------------------------------
===============================================================

--------------------------------------------------------
Host :  *****
Task count: 3000
Thread count: 128
Test type: 5
Test type name: useSingleThreadMultiCoroutinesV2
Test times: 10
--------------------------------------------------------
Total time: 251679
Average time: 25167.9
Minimum time: 17033
Maximum time: 36262
--------------------------------------------------------
Start Time: 2025-01-25T17:41:49.233527400
End Time: 2025-01-25T17:46:02.762644200
--------------------------------------------------------
===============================================================

--------------------------------------------------------
Host :  *****
Task count: 3000
Thread count: 128
Test type: 6
Test type name: useIoCoroutines
Test times: 10
--------------------------------------------------------
Total time: 14920
Average time: 1492.0
Minimum time: 1158
Maximum time: 1854
--------------------------------------------------------
Start Time: 2025-01-25T17:48:36.554294
End Time: 2025-01-25T17:48:52.094302400
--------------------------------------------------------
===============================================================
--------------------------------------------------------
Host :  *****
Task count: 3000
Thread count: 128
Test type: 7
Test type name: useCpuCoroutines
Test times: 10
--------------------------------------------------------
Total time: 45667
Average time: 4566.7
Minimum time: 3963
Maximum time: 5198
--------------------------------------------------------
Start Time: 2025-01-25T17:52:36.241419600
End Time: 2025-01-25T17:53:25.787347
--------------------------------------------------------
===============================================================


--------------------------------------------------------
Host :  *****
Task count: 3000
Thread count: 128
Test type: 8
Test type name: useSingleThreadWithIOCoroutines
Test times: 10
--------------------------------------------------------
Total time: 141554
Average time: 14155.4
Minimum time: 8813
Maximum time: 50318
--------------------------------------------------------
Start Time: 2025-01-25T18:07:12.695241300
End Time: 2025-01-25T18:09:34.301972900
--------------------------------------------------------
===============================================================

--------------------------------------------------------
Host :  *****
Task count: 3000
Thread count: 128
Test type: 9
Test type name: useSingleThreadWithCpuCoroutines
Test times: 10
--------------------------------------------------------
Total time: 84003
Average time: 8400.3
Minimum time: 7557
Maximum time: 9253
--------------------------------------------------------
Start Time: 2025-01-25T18:10:03.623195400
End Time: 2025-01-25T18:11:27.669269100
--------------------------------------------------------
===============================================================

--------------------------------------------------------
Host :  *****
Task count: 3000
Thread count: 128
Test type: 10
Test type name: useSingleThreadWithVirtualThreadCoroutines
Test times: 10
--------------------------------------------------------
Total time: 93342
Average time: 9334.2
Minimum time: 8146
Maximum time: 11236
--------------------------------------------------------
Start Time: 2025-01-25T18:12:04.634681400
End Time: 2025-01-25T18:13:38.021356900
--------------------------------------------------------
===============================================================


--------------------------------------------------------
Host :  *****
Task count: 3000
Thread count: 128
Test type: 11
Test type name: useVirtualThreadCoroutines
Test times: 10
--------------------------------------------------------
Total time: 23266
Average time: 2326.6
Minimum time: 1344
Maximum time: 3613
--------------------------------------------------------
Start Time: 2025-01-25T18:14:17.870239100
End Time: 2025-01-25T18:14:42.339861900
--------------------------------------------------------
===============================================================

--------------------------------------------------------
Host :  *****
Task count: 3000
Thread count: 128
Test type: 12
Test type name: useVirtualThread
Test times: 10
--------------------------------------------------------
Total time: 22886
Average time: 2288.6
Minimum time: 1246
Maximum time: 3822
--------------------------------------------------------
Start Time: 2025-01-25T18:06:04.298736200
End Time: 2025-01-25T18:06:27.193677200
--------------------------------------------------------
执行时间分析

最短总时间:useIoCoroutines(14920ms)
最长总时间:useSingleThread(277412ms)
最高平均时间:useSingleThread(27741.2ms)
最低平均时间:useIoCoroutines(1492.0ms)


http://www.niftyadmin.cn/n/5840574.html

相关文章

Diffusion--人工智能领域的革命性技术

在人工智能领域,“diffusion”一词通常指的是“扩散模型”(Diffusion Models),其全称为“Denoising Diffusion Probabilistic Models”(DDPMs)。扩散模型是一类生成式模型,它通过逐步去噪的方式…

UE5 蓝图学习计划 - Day 10:UI 系统(HUD 与 Widget)

在游戏开发中,UI(用户界面) 是玩家获取游戏信息、与游戏进行交互的重要部分。Unreal Engine 5 提供了 HUD(Head-Up Display) 和 Widget Blueprint(小部件蓝图) 来帮助开发者创建 血量条、得分系…

python 从知网的期刊导航页面抓取与农业科技相关的数据

要从知网的期刊导航页面抓取与农业科技相关的数据,并提取《土壤学报》2016年06期的结果,可以使用requests库来获取网页内容,BeautifulSoup库来解析HTML。由于知网页面结构可能会发生变化,在实际使用中,需要根据页面结构…

《基于Scapy的综合性网络扫描与通信工具集解析》

在网络管理和安全评估中,网络扫描和通信是两个至关重要的环节。Python 的 Scapy 库因其强大的网络数据包处理能力,成为开发和实现这些功能的理想工具。本文将介绍一个基于 Scapy 编写的 Python 脚本,该脚本集成了 ARP 扫描、端口扫描以及 TCP…

使用 HTTP::Server::Simple 实现轻量级 HTTP 服务器

在Perl中,HTTP::Server::Simple 模块提供了一种轻量级的方式来实现HTTP服务器。该模块简单易用,适合快速开发和测试HTTP服务。本文将详细介绍如何使用 HTTP::Server::Simple 模块创建和配置一个轻量级HTTP服务器。 安装 HTTP::Server::Simple 首先&…

人工智能第2章-知识点与学习笔记

结合教材2.1节,阐述什么是知识、知识的特性,以及知识的表示。人工智能最早应用的两种逻辑是什么?阐述你对这两种逻辑表示的内涵理解。什么谓词,什么是谓词逻辑,什么是谓词公式。谈谈你对谓词逻辑中的量词的理解。阐述谓词公式的解…

安卓pad仿写element-ui表单验证

安卓pad仿写element-ui表单验证 背景:仿写对象:showcase: 布局总览:核心代码总览:代码仓: 背景: 最近半年开始接触安卓开发,平时开发接触的点比较零碎,计划闲暇时做一些…

day37|完全背包基础+leetcode 518.零钱兑换II ,377.组合总和II

完全背包理论基础 完全背包与01背包的不同在于01背包的不同物品每个都只可以使用一次,但是完全背包的不同物品可以使用无数次 在01背包理论基础中,为了使得物品只被使用一次,我们采取倒序遍历来控制 回顾:>> for(int j …