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

原文链接: https://ifeve.com/reactive

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

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

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

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

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

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

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

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

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

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

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

你可能感兴趣的:(线程,并发,定时任务)