https://ifeve.com/reactive(响应式)编程-reactor/

本文探讨了为何需要异步反应式编程库,特别是在支持大量并发用户的现代应用程序中。介绍了Java开发中常见的性能瓶颈及解决方案,包括并行化和提高资源使用效率的方法。讨论了回调和Future两种异步编程模型的局限性,以及Reactor等库如何提供更高效的异步编程模式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

https://ifeve.com/reactive(响应式)编程-reactor/
首先考虑一下,为什么需要这样的异步反应式编程库? 现代应用程序可以支持大量并发用户,即使现代硬件的功能不断提高,现代软件的性能仍然是一个关键问题。

人们可以通过两种方式来提高系统的能力:

  • 并行化:使用更多线程和更多硬件资源。
  • 在现有资源的使用方式上寻求更高的效率。

通常,Java开发人员使用阻塞代码编写程序。这种做法很好,直到出现性能瓶颈,此时需要引入额外的线程。但是,资源利用率的这种扩展会很快引入争用和并发问题

更糟糕的是,会导致浪费资源。一旦程序涉及一些延迟(特别是I / O,例如数据库请求网络调用),资源就会被浪费,因为线程(或许多线程)现在处于空闲状态,等待数据。

所以并行化方法不是灵丹妙药获得硬件的全部功能是必要的

第二种方法寻求现有资源的更高的使用率,可以解决资源浪费问题。通过编写异步,非阻塞代码,您可以使用相同的底层资源将执行切换到另一个活动任务,然后在异步处理完成后返回到当前线程进行继续处理。

但是如何在JVM上生成异步代码?Java提供了两种异步编程模型:

  • CallBacks:异步方法没有返回值,但需要额外的回调参数(lambda或匿名类),在结果可用时调用它们。
  • Futures:异步方法立即返回Future 。异步线程计算任务结果,但Future对象包装对它的访问。该值不会立即可用,并且可以轮询对象,直到该值可用。例如,运行Callable 任务的ExecutorService使用Future对象。

但是上面两种方法都有局限性。首先多个callback难以组合在一起,很快导致代码难以阅读以及难以维护(称为“Callback Hell”):

第二种方法,寻求现有资源的更高的使用率,可以解决资源浪费问题。通过编写异步,非阻塞代码,您可以使用相同的底层资源将执行切换到另一个活动任务,然后在异步处理完成后返回到当前线程进行继续处理。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值