美文网首页
Reactive概念的简单记录

Reactive概念的简单记录

作者: NealLemon | 来源:发表于2019-01-06 22:12 被阅读0次

本文是学习了小马哥在慕课网的课程的《Spring Boot 2.0深度实践之核心技术篇》的内容结合自己的需要和理解做的笔记。

两种模式

  • Reactive Programming:同步或异步非阻塞执行,数据传播被动通知
    • 编程模型
      • 响应式编程
      • 函数式编程
    • 设计模式
      • 观察者模式(Observer pattern )
      • 响应流模式(Reactive streams pattern )
      • 迭代器模式(Iterator pattern)
    • 技术栈
      • Java 8 Stream
      • Java Observable / Observer
      • Exectuor 、 Future 、 Runnable
      • Java Iterator
    • 模式
      • 推模式(push-based)
  • Imperative programming:同步阻塞执行,数据主动获取
    • 模式
      • 拉模式(pull-based)

Reactive Programming 作为观察者模式(Observer) 的延伸,在处理流式数据的过程中,并非使用传统
的命令编程方式( Imperative programming)同步拉取数据,如迭代器模式(Iterator) ,而是采用同步
或异步非阻塞地推拉相结合的方式,响应数据传播时的变化。

Reactive Programming 使用场景

  • Reactive Streams Specification for the JVM

    • 管理流式数据交换( govern the exchange of stream data)
    • 异步边界(asynchronous boundary)
  • Spring Framework

    • 通常并非让应用运行更快速(generally do not make applications run faster)
    • 利用较少的资源提升伸缩性(scale with a small, fixed number of threads and less memory)
  • Reactive Programming 作为观察者模式(Observer) 的延伸,不同于传统的命令编程方式( Imperative
    programming)同步拉取数据的方式,如迭代器模式(Iterator) 。而是采用数据发布者同步或异步地推
    送到数据流(Data Streams)的方案。当该数据流(Data Steams)订阅者监听到传播变化时,立即作出
    响应动作。在实现层面上,Reactive Programming 可结合函数式编程简化面向对象语言语法的臃肿性,
    屏蔽并发实现的复杂细节,提供数据流的有序操作,从而达到提升代码的可读性,以及减少 Bugs 出现的
    目的。同时,Reactive Programming 结合背压(Backpressure)的技术解决发布端生成数据的速率高于
    订阅端消费的问题。

Reactive Streams 规范

Reactive Streams is a standard and specification for Stream-oriented libraries for the JVM that

  • process a potentially unbounded number of elements
  • in sequence,
  • asynchronously passing elements between components,
  • with mandatory non-blocking backpressure.

API 组件

  • Publisher(数据发布者,数据上游)

    • 接口

      • public interface Publisher<T> {
        public void subscribe(Subscriber<? super T> s);
        }
        
  • Subscriber(数据订阅者,数据上游)

    • 接口

      • public interface Subscriber<T> {
        public void onSubscribe(Subscription s);  //当下游订阅时
        public void onNext(T t);  //当下游接收数据时
        public void onError(Throwable t);  //当数据流(Data Streams)执行完成时
        public void onComplete();  //当数据流(Data Streams)执行错误时
        }
        
  • Subscription(订阅信号控制) ----背压控制

    • 接口

      • public interface Subscription {
        public void request(long n);  //请求上游元素的数量
        public void cancel();  //请求停止发送数据并且清除资源
        }
        
  • Processor(消息发布者和订阅者综合体)

    • 接口

      • public interface Processor<T, R> extends Subscriber<T>, Publisher<R> {
        }
        

背压(Backpressure)

​ 假设下游Subscriber工作在无边界大小的数据流水线时,当上游Publisher提供数据的速率快于下游
Subscriber的消费数据速率时,下游Subscriber将通过传播信号(request)到上游Publisher,请求限制
数据的数量( Demand )或通知上游停止数据生产。

总结

​ 这里只是Reactive相关知识介绍,觉得想深入的了解一下 需要理解Netty等异步框架。以后有机会会研究研究。

相关文章

  • Reactive概念的简单记录

    本文是学习了小马哥在慕课网的课程的《Spring Boot 2.0深度实践之核心技术篇》的内容结合自己的需要和理解...

  • 比较RAC和RxSwift

    序言 首先先介绍两个概念, Reactive Extensions 和Functional Reactive Pr...

  • Reactive Spring -- 1. Reactive概念

    Spring 5 中引入了Reactive理念,下文主要介绍Reactive模式的基础。 工程地址,分支为reac...

  • RxJava与RxKotlin项目实践

    What is Rx? 基本概念 RxJava – Reactive Extensions for the JVM...

  • RxJava2初探

    1.RxJava概念及原理 RxJava – Reactive Extensions for the JVM – ...

  • 前端开发必备技能之 RxJS 框架介绍及使用详解

    概念 RxJS 是 Reactive Extensions for JavaScript 的缩写,起源于 Reac...

  • Rxjs

    响应式编程简介 Rxjs概念 Rxjs全称Reactive Extension for JavaScript,Ja...

  • mvvm模式

    看到一篇介绍 MVVM的文章,这个概念出自Functional Reactive Programming on i...

  • Reactive Cocoa 学习笔记

    Reactive Cocoa 学习笔记 [TOC] 基本概念 什么是RAC ReacticeCocoa 结合了好几...

  • RAC

    RP 概念 RP(Reactive Programming)——响应编程,实际上是异步事件流(Asynchrono...

网友评论

      本文标题:Reactive概念的简单记录

      本文链接:https://www.haomeiwen.com/subject/wnmerqtx.html