中文字幕二区_国产精品免费在线观看_黄色网站观看_人人草人人澡_日本真实娇小xxxx

您的位置: 首頁 > 技術文檔 > 網(wǎng)絡編程 > 異步編程與響應式框架
PHP校驗ISBN碼的函數(shù) 回到列表 GraphDatabase在關系數(shù)據(jù)庫中的實現(xiàn)
 異步編程與響應式框架

作者:老趙 時間: 2010-09-25 文檔類型:轉(zhuǎn)載 來自:老趙點滴

第 1 頁 異步編程與響應式框架 [1]
第 2 頁 異步編程與響應式框架 [2]
第 3 頁 異步編程與響應式框架 [3]
第 4 頁 異步編程與響應式框架 [4]

本文原發(fā)表于《程序員》雜志9月刊,現(xiàn)將全文公開至此。前幾天的技術交流會上我也講了這部分內(nèi)容,配合著看會有更好效果。

此外我想再多幾句。《程序員》雜志在某些方面必須盡快做出調(diào)整。就拿我這篇文章來說,代碼除了被三欄的版式搞得支離破碎以外,其中必要的空格也莫名奇妙地少了許多。我認為《程序員》如今在內(nèi)容方面已經(jīng)有了顯著提高,但是在這種“表面”工夫上也得抓緊才好,這也是國內(nèi)同類雜志中“最專業(yè)者”所應有的風范。

前言

異步操作是強大的,它是許多高伸縮性架構(gòu)的基石。異步操作在許多情況下是必須的,例如在客戶端保持用戶界面的響應能力,以及在日益興起的云計算場景中。但是,異步編程又是十分困難的,它讓這讓許多程序員敬而遠之。因此,越來越多的編程語言都對異步編程提供了相當程度的支持,其中的典型代表便是F#中的異步工作流以及Scala的Actor模型。不過目前的一些主流編程語言,如C#或是JavaScript,它們在設計之時并沒有在異步編程上考慮太多,我們便會根據(jù)它們的語言特性,提供合適的異步編程模型及其實現(xiàn)。而本文介紹的便是其中一例:響應式編程(Reactive Programming)模型及響應式框架(Reactive Framework,簡稱Rx)。

異步編程的難點

異步編程之所以困難,主要有三大難點。

首先是對于狀態(tài)的維護。在普通編程中,我們已經(jīng)習慣了根據(jù)各種狀態(tài)采取不同做法的編程方式。在異步編程中,狀態(tài)對于操作的影響則往往更為復雜。例如,我們在編寫一個鼠標“拖動及繪圖”的行為時,一般會采用這樣的邏輯:

在MouseDown事件中將isDragging標記設為true,表示“拖動開始”,并記錄當前鼠標位置prevPos。

在MouseUp事件中將isDragging標記設為false,表示“拖動結(jié)束”。

在MouseMove事件中檢查isDragging標記,如果為true,根據(jù)鼠標當前位置currPos和之前記錄的prevPos進行繪圖,并將currPos的值寫入prevPos。

僅在這樣一個最基本的場景中,我們便需要編寫三個事件處理器(Event Handler),控制isDragging,prevPos等外部狀態(tài),并根據(jù)這些狀態(tài)決定事件觸發(fā)時的效果。這樣的例子數(shù)不勝數(shù),尤其是在各式拖放操作中,幾乎都會涉及大量狀態(tài)的控制(例如,判斷物體是否進入某個特定區(qū)域)。

異步編程的另一個難點,在于異步操作之間的組合及交互。例如在如上的簡單拖放操作中,我們便涉及到了MouseDown,MouseUp及MouseMove三個事件。從某些角度來說,客戶端的UI事件還是比較容易處理的,因為它們往往都是在單一線程上依次執(zhí)行。但是在另外一些場景中,如云計算時,我們往往會同時發(fā)起多個異步操作,并根據(jù)這些操作的結(jié)果進行后續(xù)處理,甚至還會有一個額外的超時監(jiān)控,這樣便很有可能會出現(xiàn)并發(fā)操作的競爭(Race)情況,這將會成為程序復雜度的災難。

此外,異步操作還會破壞“代碼局部性(Code Locality)”,這可能也是異步操作中最為常見的阻礙。程序員早已習慣了“線性”地表達邏輯,但即便是多個順序執(zhí)行的異步操作,也會因為大量的回調(diào)函數(shù)而將算法拆得支離破碎,更何況還會出現(xiàn)各種循環(huán)及條件判斷。同時,在線性的代碼中,我們可以使用“局部變量”保存狀態(tài),而在編寫異步代碼時則需要手動地在多個函數(shù)中傳遞狀態(tài)。此外,由于邏輯被拆分至多個方法,因此我們也無法使用傳統(tǒng)的try/catch進行統(tǒng)一異常處理。

推模型與拉模型

平時我們使用最多的便是“交互式(Interactive)”的編程方式,采用的是組件之間的相互調(diào)用來表現(xiàn)邏輯。例如,對象A向?qū)ο驜請求數(shù)據(jù)并等待返回,待對象B完成并返還數(shù)據(jù)之后A才繼續(xù)進行后面的操作。交互式編程的一個典型應用便是GoF23中的迭代器(Iterator)模式,它在.NET中的實現(xiàn)為IEnumerable及IEnumerator接口,例如:

void Traverse(IEnumerable<int> source)
{
    var etor = source.GetEnumerator();
    while (etor.MoveNext())
    {
        Console.WriteLine(etor.Current);
    }
}

出處:老趙點滴
責任編輯:bluehearts

上一頁 下一頁 異步編程與響應式框架 [2]

◎進入論壇網(wǎng)絡編程版塊參加討論

作者文章
使用OpenOffice.org將各類文檔轉(zhuǎn)為PDF
關鍵字搜索 常規(guī)搜索 推薦文檔
熱門搜索:CSS Fireworks 設計比賽 網(wǎng)頁制作 web標準 用戶體驗 UE photoshop Dreamweaver Studio8 Flash 手繪 CG
站點最新 站點最新列表
周大!熬•自然”設計大賽開啟
國際體驗設計大會7月將在京舉行
中國國防科技信息中心標志征集
云計算如何讓安全問題可控
云計算是多數(shù)企業(yè)唯一擁抱互聯(lián)網(wǎng)的機會
阿里行云
云手機年終巨獻,送禮標配299起
阿里巴巴CTO王堅的"云和互聯(lián)網(wǎng)觀"
1499元買真八核 云OS雙蛋大促
首屆COCO桌面手機主題設計大賽
欄目最新 欄目最新列表
淺談JavaScript編程語言的編碼規(guī)范
如何在illustrator中繪制臺歷
Ps簡單繪制一個可愛的鉛筆圖標
數(shù)據(jù)同步算法研究
用ps作簡單的作品展示頁面
CSS定位機制之一:普通流
25個最佳最閃亮的Eclipse開發(fā)項目
Illustrator中制作針線縫制文字效果
Photoshop制作印刷凹凸字體
VS2010中創(chuàng)建自定義SQL Rule
>> 分頁 首頁 前頁 后頁 尾頁 頁次:1/41個記錄/頁 轉(zhuǎn)到 頁 共4個記錄

藍色理想版權(quán)申明:除部分特別聲明不要轉(zhuǎn)載,或者授權(quán)我站獨家播發(fā)的文章外,大家可以自由轉(zhuǎn)載我站點的原創(chuàng)文章,但原作者和來自我站的鏈接必須保留(非我站原創(chuàng)的,按照原來自一節(jié),自行鏈接)。文章版權(quán)歸我站和作者共有。

轉(zhuǎn)載要求:轉(zhuǎn)載之圖片、文件,鏈接請不要盜鏈到本站,且不準打上各自站點的水印,亦不能抹去我站點水印。

特別注意:本站所提供的攝影照片,插畫,設計作品,如需使用,請與原作者聯(lián)系,版權(quán)歸原作者所有,文章若有侵犯作者版權(quán),請與我們聯(lián)系,我們將立即刪除修改。

您的評論
用戶名:  口令:
說明:輸入正確的用戶名和密碼才能參與評論。如果您不是本站會員,你可以注冊 為本站會員。
注意:文章中的鏈接、內(nèi)容等需要修改的錯誤,請用報告錯誤,以利文檔及時修改。
不評分 1 2 3 4 5
注意:請不要在評論中含與內(nèi)容無關的廣告鏈接,違者封ID
請您注意:
·不良評論請用報告管理員,以利管理員及時刪除。
·尊重網(wǎng)上道德,遵守中華人民共和國的各項有關法律法規(guī)
·承擔一切因您的行為而直接或間接導致的民事或刑事法律責任
·本站評論管理人員有權(quán)保留或刪除其管轄評論中的任意內(nèi)容
·您在本站發(fā)表的作品,本站有權(quán)在網(wǎng)站內(nèi)轉(zhuǎn)載或引用
·參與本評論即表明您已經(jīng)閱讀并接受上述條款
推薦文檔 | 打印文檔 | 評論文檔 | 報告錯誤  
專業(yè)書推薦 更多內(nèi)容
網(wǎng)站可用性測試及優(yōu)化指南
《寫給大家看的色彩書1》
《跟我去香港》
眾妙之門—網(wǎng)站UI 設計之道
《Flex 4.0 RIA開發(fā)寶典》
《贏在設計》
犀利開發(fā)—jQuery內(nèi)核詳解與實踐
作品集 更多內(nèi)容

雜⑦雜⑧ Gold NORMANA V2