JAVA16版本.JDK16关于TCP和UDP的优化

简介: JAVA16版本.JDK16关于TCP和UDP的优化

性能加倍:虚拟线程(光纤)和JDK15/16!

如果您使用UDP作为传输,并希望将性能提高一倍:请继续阅读!

如果使用TCP,性能不会有太大变化。您可能仍然对最近的jdk和虚拟线程(以前称为“fibers”)将带来什么感兴趣。

虚拟线程

虚拟线程是轻量级线程,在概念上类似于旧的绿色线程,由JVM而不是内核来管理。许多虚拟线程可以映射到同一个操作系统本机(运营商)线程(当然,一次只能映射一个),因此我们可以拥有数百万个虚拟线程。

虚拟线程是用continuations实现的,但这只是一个细节。重要的是JDK中的所有阻塞调用(停车场锁支架()等)已修改为屈服而不是阻塞。这意味着我们不会浪费宝贵的本机载波线程,而只是进入非运行状态。当块结束时,线程被简单地再次标记为可运行,调度程序在它停止的地方继续继续执行。

主要优点:

阻塞呼叫不需要更改,例如变为被动呼叫

不需要线程池:只需创建一个虚拟线程

更少的上下文切换(减少/消除阻塞调用)

我们可以有很多虚拟线程

虚拟线程在JDK中出现还需要一段时间,但JGroups已经添加了对它的支持:只需在传输中设置use_fibers=“true”。如果JVM支持虚拟线程,那么将使用它们,否则我们将返回到常规的本机线程。

UDP:网络改进

虽然虚拟线程为jgroup带来了优势,但通过尝试更新的JDK,可以获得其他性能提升。

从jdk15开始,DatagramSockets和MulticastSockets的实现已经改为委托给DatagramChannels和multicast channels。此外,还支持虚拟线程。

这提高了UDP使用DatagramChannels和multicast channels的性能。

网络代码改进和虚拟线程的结合为UDP带来了惊人的结果,如下所示。

性能

用于以太网测试(1-16个)和1-5个虚拟机的JDEAK(16个)和1个。前两个使用本机线程,后一个使用虚拟线程。

从[1]中可以看出,UDP的性能从jdk11上的44’691提高到jdk16-ea5上的81’402;这是惊人的82%的增长!启用虚拟线程可以将16-ea5和16织机+2-14之间的性能提高到88’252,这又是8%!

jdk11和16织机的性能差异是97%!

TCP的性能差别很小;我想是因为TCP代码已经在jdk11中进行了优化。

在jdk16loom+2-14上运行表明UDP的性能已经与TCP不相上下,事实上UDP甚至比TCP快3%!

如果您想自己尝试一下:转到JGroups Github repo并创建JAR(antjar)。或者稍等一下:我很快就会发布5.0.0.Final,其中包含了这些更改。

不确定是否要将更改后传到4.x分支。。。

享受吧!

[1]https://drive.google.com/file/d/1Ars1LOM7cEf6AWpPwZHeIfu kKLa9gv0/view?usp=分享

[2]http://openjdk.java.net/jeps/373


目录
相关文章
|
13天前
|
存储 网络协议 算法
UDP 协议和 TCP 协议
本文介绍了UDP和TCP协议的基本结构与特性。UDP协议具有简单的报文结构,包括报头和载荷,报头由源端口、目的端口、报文长度和校验和组成。UDP使用CRC校验和来检测传输错误。相比之下,TCP协议提供更可靠的传输服务,其结构复杂,包含序列号、确认序号和标志位等字段。TCP通过确认应答和超时重传来保证数据传输的可靠性,并采用三次握手建立连接,四次挥手断开连接,确保通信的稳定性和完整性。
46 1
UDP 协议和 TCP 协议
|
10天前
|
Java Linux
java基础(3)安装好JDK后使用javac.exe编译java文件、java.exe运行编译好的类
本文介绍了如何在安装JDK后使用`javac.exe`编译Java文件,以及使用`java.exe`运行编译好的类文件。涵盖了JDK的安装、环境变量配置、编写Java程序、使用命令行编译和运行程序的步骤,并提供了解决中文乱码的方法。
27 1
|
8天前
|
Java
java版本详解
java版本详解
|
12天前
|
存储 网络协议 算法
UDP & TCP 超详解
本文详细介绍了UDP与TCP协议的相关知识。首先阐述了UDP协议结构,包括其报文格式、各字段含义及其CRC校验和机制。接着深入探讨了TCP协议,涵盖其协议结构、确认应答机制、超时重传策略、三次握手与四次挥手过程,以及滑动窗口、流量控制和拥塞控制等关键技术。最后分析了TCP在异常情况下的处理机制,如进程崩溃、主机关机、掉电和网线断开等情况。
75 5
|
8天前
|
Oracle Java 关系型数据库
Linux下JDK环境的配置及 bash: /usr/local/java/bin/java: cannot execute binary file: exec format error问题的解决
如果遇到"exec format error"问题,文章建议先检查Linux操作系统是32位还是64位,并确保安装了与系统匹配的JDK版本。如果系统是64位的,但出现了错误,可能是因为下载了错误的JDK版本。文章提供了一个链接,指向Oracle官网上的JDK 17 Linux版本下载页面,并附有截图说明。
Linux下JDK环境的配置及 bash: /usr/local/java/bin/java: cannot execute binary file: exec format error问题的解决
|
17天前
|
网络协议
TCP和UDP区别
简介: TCP和UDP区别
|
26天前
|
Java API 开发者
【Java模块化新飞跃】JDK 22模块化增强:构建更灵活、更可维护的应用架构!
【9月更文挑战第9天】JDK 22的模块化增强为开发者构建更灵活、更可维护的应用架构提供了强有力的支持。通过模块化设计、精细的依赖管理和丰富的工具支持,开发者可以更加高效地开发和管理应用,提高应用的性能和可维护性。
57 10
|
26天前
|
监控 IDE Java
【Java性能调优新工具】JDK 22性能分析器:深度剖析,优化无死角!
【9月更文挑战第9天】JDK 22中的性能分析器为Java应用的性能调优提供了强大的支持。通过深度集成、全面监控、精细化分析和灵活报告生成等核心优势,性能分析器帮助开发者实现了对应用性能的全面掌控和深度优化。在未来的Java开发过程中,我们期待性能分析器能够继续发挥重要作用,为Java应用的性能提升贡献更多力量。
|
9天前
|
网络协议
最简单的tcp客户端和服务端 还有udp
最简单的tcp客户端和服务端 还有udp
|
2月前
|
消息中间件 网络协议 算法
UDP 和 TCP 哪个更好?
【8月更文挑战第23天】
100 0
下一篇
无影云桌面