Java的虚拟线程和结构化并发,含完整示例代码

目录

一、Java的线程模型

二、Quasar From parallel universe

三、Project loom

本文链接:Java的虚拟线程和结构化并发,含完整示例代码 


一、Java的线程模型

Java语言对于线程进行了完整抽象,你无需关注各类操作系统的差异,写出并发程序不需要特别陡峭的学习曲线,想想就特别美好。

但现实是这一统一的线程模型在云原生时代反而失去了优势,因为与操作系统1:1对应的线程模型,导致Java的线程是一种非常重量级的线程(内存占用和上下文切换)。

💡 64 位 Linux 上 HotSpot 的线程栈容量默认是1MB,线程的内核元数据(Kernel Metadata)还要额外消耗 2-16KB 内存,所以单个虚拟机的最大线程数量一般只会设置到 200 至 400 条,当程序员把数以百万计的请求往线程池里面灌时,系统即便能处理得过来,其中的切换损耗也相当可观的。

这种模型对于CPU密集型的应用会有更好的资源利用率,但对于IO密集型的就会十分痛苦。为提高Java中IO的性能,我们大量使用Reactor编程模型、Netty的非阻塞多路复用IO几乎成为了规范,但这类IO场景在底层实现上有两大挑战:

1.大量线程,IO操作越多,为提高吞吐量往往增加更多线程。

2.异步编程,为避免线程阻塞,必须采用异步编程,但很明显,异步可读性差、嵌套过深、反人类。

如何解决这个问题呢?

核心是要重新设计线程模型和结构化并发。

Green Thread是上古Java采用过的模型,OS Thread是当前Java使用过的,Virtual Thread是正在努力进行的。

 结构化并发是 2016 年才提出的新的并发编程概念。可以让你像写同步代码的方式写异步代码。

从两个项目开始深入介绍一下Java在线程模型上的努力和发展趋势。

二、Quasar From parallel universe

Quasar 是一个为 Java 和Kotlin提供高性能轻量级线程、类似 Go 的channels、类似 Erlang 的 actors 以及其他异步编程工具的库。

Quasar 由Parallel Universe开发并作为自由软件发布,根据 Eclipse 公共许可证和GNU Lesser General Public License 获得双重许可。

不过这个框架在2018年已停止维护。目前已迁移到即将介绍的Project Loom中。

 虽然已经废弃,但在2018年属于Java非常前沿的技术,当时也做了具体的调研和开发验证,最大的作用是轻量级线程Fiber的运用和像写同步代码的方式写异步代码的编程模式(不过实现这种效果还是比较复杂)。

以下是当时改造Tomcat以支持servlet逻辑中fiber线程的运用:

maven配置

<dependency>
			<groupId>co.paralleluniverse</groupId>
			<artifactId>quasar-core</artifactId>
			<version>0.7.10</version>
</dependency>

扩展Tomcat的业务执行线程池:

/**
     * 测试 使用Servlet的方式,而非替换内部线程执行
     * 2018/8/28.
     */
    public class FiberTomcatThreaPool extends StandardThrea
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

TechingOn

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值