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的;
響應式編程--專注於短時間的數據流鏈條上的計算--因此傾向事件驅動;
響應式系統--關注於通過分布式的通信和協作所得到的彈性和韌性--則是消息驅動的.