RX响应式编程就是异步数据流编程:单击事件或事件总线;(观察者模式)编程
有一堆的函数可以建立流,也能将任何流-,也能将任何流进行组合和过滤.一个流可以做为另外一个流的输入,可以将两个流合并,能够经过过滤流获得须要的事件
响应式编程是但愿经过某种方式创建联系,而不是执行某种赋值操做(命令);
int a = 1;
int b = a+1;
messagebox.show(b);/b= 2;
a = 10
messagebox.show(b);//b=11
响应式:
int a = 1;
int b <= a+1; ///<=符号只是表明A和B之间的关系的操做符
messagebox.show(b);/b= 2;
a = 10
messagebox.show(b);//b=11
RX是响应式的扩展,即支持响应式编程的一种扩展,
异步和数据流都是为了正确的构建事物的关系而存在,异步是为了区分无关的事务,数据流是为了联系起有关的事物.数组
优点:
在业务层面实现代码逻辑分离,方便后期维护和拓展;
极大的提升程序的响应速度,充分发掘CPU的能力;
帮助开发者提升代码的抽象能力和充分理解业务逻辑;
Rx丰富的操做符会帮助咱们极大地简化代码逻辑.异步
响应式编程的关键就是将异步可观查对象模块化. Rx有两种常见模式,一是观察者模式,其二是迭代模式分布式
Responsive:可响应的,要求系统尽量的在任什么时候候都能作到及时响应;
Resilient:可恢复的,要求系统即便出错了,也要保持可响应性;
Elastic:可伸缩的,要求系统在各类负载下都能保持可响应性;
Message Driven:消息驱动的.要求系统经过异步消息链接各个组件;模块化
数据流(Data streams): 分为静态数据流(数组,文件)和动态数据流(事件流,日志流);
变化传播(The propagation change):简单的来讲,就是以一个数据流做为输入,通过转变转化成另外一个数据流,而后分发给订阅者的过程.异步编程
RP包含了三个特性:
描述而非执行:在执行subscribe()方法以前没有任何事情发生,比如不管多长的水管,只要水龙头不开,水管里的水就不会流动.
提升吞吐量,相似于HTTP/2中的链接复用,经过线程提升吞吐量;
背压支持:背压就是一种反馈机制,使用背压,订阅者只须要发起一次请求,就能接二连三的重复请求数据.
问题:
使用复用线程有助于提升吞吐量,可是一旦在某个回调函数中被卡住,,整个线程都会被阻塞,甚至程序被拖垮;
难以调试;
响应式编程是异步编程下的子集;也是一个范式;响应式编程通常是事件驱动event-driven相比之下,响应式系统是消息驱动Message-dirven的;
响应式编程--专一于短期的数据流链条上的计算--所以倾向事件驱动;
响应式系统--关注于经过分布式的通讯和协做所获得的弹性和韧性--则是消息驱动的.函数