ReactiveX簡介

ReactiveX

ReactiveX 是一個基于一系列可觀察的異步和基礎(chǔ)事件編程組成的一個庫。

它繼承觀察者模式,支持序列數(shù)據(jù)或者事件。更高級的用法允許你將如下的一些抽象概念操作一起聯(lián)合使用,比如低線程肩袍,同步,線程安全婚惫,數(shù)據(jù)并發(fā)氛赐,非阻塞I/O流。

它通常被稱為“函數(shù)響應(yīng)式編程”先舷,這是用詞不當(dāng)?shù)募韫堋eactiveX 可以是函數(shù)式的,可以是響應(yīng)式的蒋川,但是和“函數(shù)響應(yīng)式編程”是不同的概覽蛙婴。一個主要的不同點(diǎn)是“函數(shù)響應(yīng)式編程”是對隨著時間不停變化的值進(jìn)行操作的,而ReactiveX是對超時提交產(chǎn)生的離散值上尔破。

為什么使用Observables街图?

ReactiveX 可見模式允許你使用數(shù)組等數(shù)據(jù)項(xiàng)的集合來進(jìn)行些異步事件流組合操作。它使你從繁瑣的web式回調(diào)中解脫懒构,從而能使得代碼可讀性大大提高餐济,同時減少bug的產(chǎn)生。

Observables是可以進(jìn)行一系列組合的

它技術(shù)上和Java Futures一樣簡單是直接當(dāng)著一個異步執(zhí)行使用的胆剧,但是當(dāng)Futures被嵌套使用復(fù)雜度會大大增加絮姆。

很難直接使用Futures去優(yōu)化條件異步執(zhí)行流程。然而Observables可以秩霍。使用Future.get()馬上使其變得復(fù)雜或者提前進(jìn)入阻塞狀態(tài)篙悯,使的異步執(zhí)行的優(yōu)點(diǎn)淡然無存。

ReactiveX Observables 是為了處理組合流和異步序列數(shù)據(jù)設(shè)計(jì)的铃绒。

Observables 數(shù)據(jù)是靈活的

ReactiveX Observables不單單支持單個標(biāo)量的值(想Futures)的提交,同時還支持多值甚至是很多的數(shù)據(jù)流鸽照。Observables是一個單個抽像,能被用到一些用戶場景中颠悬。Observable和Iterable一樣運(yùn)用靈活并且可以進(jìn)行更加高雅的操作矮燎。


event ? ? ? ? ? ? ? ? ? ? ? ? ? ?Iterable (pull) ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?Observable (push)


retrieve data ? ? ? ? ? ? ? ? T next() ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?onNext(T)


discover error ? ? ? ? ? ? throwsExceptionon ? ? ? ? ? ? ? ? ? ? ? ? Error(Exception)


complete ? ? ? ? ? ? ? ? ? ?!hasNext() ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? onCompleted()


Observables 是類型多變

并發(fā)、異步資源可以應(yīng)用在ReactiveX中赔癌,Reactiviex可以當(dāng)著一個線程池使用诞外,甚至loops,非阻塞I/O線程使用灾票,無論什么能夠更好符合你的需要峡谊,風(fēng)格、專長刊苍〖让牵客戶端代碼處理交互使用Observables進(jìn)行異步處理,無論你潛在的操作是阻塞或者非阻塞都可以選擇它來實(shí)現(xiàn)班缰。

?Observable 如何執(zhí)行呢?


public Observable getData();

.作為調(diào)用者是否異步運(yùn)行在同一個線程中?

.是否異步運(yùn)行在不同的線程中?

.是否被劃分在多種線程中并且順序返回?cái)?shù)據(jù)對于調(diào)用者?

.是否使用 Actor (or multiple Actors) 代替線程池?

.是否使用網(wǎng)絡(luò)NIO(網(wǎng)絡(luò)接口對象)通過loop異步進(jìn)行網(wǎng)絡(luò)異步訪問贤壁?

.使用使用loop 來將工作線程從回調(diào)線程中剝離開?


回調(diào)函數(shù)存在問題

回調(diào)函數(shù)為了解決 Future.get()過早的阻塞問題是通過不允許執(zhí)行任何阻塞的行為埠忘。這能處理很好因?yàn)閳?zhí)行的時候響應(yīng)數(shù)據(jù)已經(jīng)就緒了脾拆。

未來,回調(diào)函數(shù)能夠簡單通過單個級別的異步執(zhí)行莹妒,然而通過嵌套就顯得不靈活名船。

ReactiveX 是跨語言的

ReactiveX 當(dāng)前被多種編程語言實(shí)現(xiàn),它遵守各種語言慣用語旨怠,同時多種語言正在加入其中渠驼。

交互式編程

ReactiveX 提供操作符集合,你可以使用 filter, select, transform, combine, and compose Observables鉴腻。這將形成有效執(zhí)行和結(jié)構(gòu)迷扇。

你可以將Observable類的“push”行為等價(jià)于iterable的“pull”百揭。使用Iterable消費(fèi)者拉取數(shù)據(jù)從生產(chǎn)者此時線程阻塞直到數(shù)據(jù)到達(dá)。相比之下Observable生產(chǎn)者上傳數(shù)據(jù)給消費(fèi)者無論何時只要數(shù)據(jù)可用蜓席。這個方式是非常靈活的器一,因?yàn)閿?shù)據(jù)到達(dá)可以使用同步或者異步的方式。

Demo Iterator/Observable 相似處

Observable 類型 相對于the Gang of Four’s Observer pattern增加了2個缺失的語法厨内,去匹配可用的Iterable 類型祈秕。

? ? ? ?1.當(dāng)前沒有跟多可用數(shù)據(jù)時候生產(chǎn)者通知消費(fèi)者的能力(onCompleted方法)

? ? ? ?2.當(dāng)前發(fā)生錯誤的時候生產(chǎn)者通知消費(fèi)者的能力(onErro方法)

通過以上這些,ReactiveX使得Iterable和Observable類型一致雏胃。唯一的不同是數(shù)據(jù)流動的方向请毛。這是非常重要的因?yàn)楝F(xiàn)在你在Iterable上面的一系列操作同樣可以用Oberservable達(dá)到效果。

參考資料:

http://reactivex.io/intro.html

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末瞭亮,一起剝皮案震驚了整個濱河市方仿,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌街州,老刑警劉巖兼丰,帶你破解...
    沈念sama閱讀 206,311評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異唆缴,居然都是意外死亡鳍征,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評論 2 382
  • 文/潘曉璐 我一進(jìn)店門面徽,熙熙樓的掌柜王于貴愁眉苦臉地迎上來艳丛,“玉大人,你說我怎么就攤上這事趟紊〉” “怎么了?”我有些...
    開封第一講書人閱讀 152,671評論 0 342
  • 文/不壞的土叔 我叫張陵霎匈,是天一觀的道長戴差。 經(jīng)常有香客問我,道長铛嘱,這世上最難降的妖魔是什么暖释? 我笑而不...
    開封第一講書人閱讀 55,252評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮墨吓,結(jié)果婚禮上球匕,老公的妹妹穿的比我還像新娘。我一直安慰自己帖烘,他們只是感情好亮曹,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,253評論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般照卦。 火紅的嫁衣襯著肌膚如雪式矫。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,031評論 1 285
  • 那天窄瘟,我揣著相機(jī)與錄音衷佃,去河邊找鬼。 笑死蹄葱,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的锄列。 我是一名探鬼主播图云,決...
    沈念sama閱讀 38,340評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼邻邮!你這毒婦竟也來了竣况?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,973評論 0 259
  • 序言:老撾萬榮一對情侶失蹤筒严,失蹤者是張志新(化名)和其女友劉穎丹泉,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體鸭蛙,經(jīng)...
    沈念sama閱讀 43,466評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡摹恨,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,937評論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了娶视。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片晒哄。...
    茶點(diǎn)故事閱讀 38,039評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖肪获,靈堂內(nèi)的尸體忽然破棺而出寝凌,到底是詐尸還是另有隱情,我是刑警寧澤孝赫,帶...
    沈念sama閱讀 33,701評論 4 323
  • 正文 年R本政府宣布较木,位于F島的核電站,受9級特大地震影響青柄,放射性物質(zhì)發(fā)生泄漏伐债。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,254評論 3 307
  • 文/蒙蒙 一刹前、第九天 我趴在偏房一處隱蔽的房頂上張望泳赋。 院中可真熱鬧,春花似錦喇喉、人聲如沸祖今。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,259評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽千诬。三九已至耍目,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間徐绑,已是汗流浹背邪驮。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留傲茄,地道東北人毅访。 一個月前我還...
    沈念sama閱讀 45,497評論 2 354
  • 正文 我出身青樓,卻偏偏與公主長得像盘榨,于是被迫代替她去往敵國和親喻粹。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,786評論 2 345

推薦閱讀更多精彩內(nèi)容