對象與並發:概述

來源:互聯網
上載者:User

 

          本文暫不討論“線程、進程、競爭冒險” 等這些並發機制和細節, 而專註於提供一個基本的思路和想法。

          世界是物件導向與並發的。 無數個體對象出於各種意志並發地完成活動, 推動世界的發展。

           必要思想

          具備一些基本必要的思想是重要的。這些思想會影響我們的思考方式,以及設計和編寫程式的決策。 

          1.  使用“對象”(而不是類)的思維去思考問題。

                     類只是刻畫對象的一種方式而已,但絕不是唯一的方式。 思考應用程式將由那些對象及其互動來構成和實現。應用程式中不一定有類,但一定有對象。

          2.  編寫並發安全的程式的核心是保護共用可變狀態的訪問。

                     並發安全的核心不是關於並發機制,而是關於狀態的管理。從狀態的角度來考慮並發,而不是從並發機制。 因為思考方式會決定並發機制的實現與選擇。                     

          關鍵元素:  環境、狀態、 對象、資源、 事件、活動、時間

           狀態:  構成應用程式實現的原子量。狀態是對資料所包含資訊的一種抽象。  

           環境:  是狀態的集合。 分為全域環境、局部環境和個體環境。 個體環境是指單個對象的狀態所構成的極小語境; 全域環境是由所有對象的狀態構成的極大語境; 局部環境是根據需求而劃定的中間語境,由若干對象的狀態所構成的。 環境影響對象及其活動。

           對象:  是擁有狀態、執行活動的基本單位。通過對象活動來修改環境的狀態,從而實現事件的發展和環境的變更。 對象執行活動需要依賴於一些資源。這些資源有些是對象自身所擁有的狀態,比如能力、素質等,有些是對象之外的狀態,比如機器裝置等。 根據對象職責的不同,可以分為: 普通對象, 協調者對象、 全域管理者、 資源分派與調度對象等。

           活動:  活動的作用是對環境的狀態產生變更。

           資源:  資源實際上也是一種對象, 但它通常不具備執行活動的能力。資源是對象完成活動的必不可少的元素。

           事件:   在一個事件中, 會有零個或多個對象執行活動。事件完成後會具有影響力,這些影響意味著全域環境狀態的變化。

           時間:  一種橫跨上述各種概念的重要元素。

           應用程式的設計與管理就是對上述各種元素的設計與管理,尤其主要的是對狀態的管理; 有了時間的影響, 就更加困難了: 要對全域狀態的變遷進行管理。軟體的可擴充性就是因為狀態的變遷帶來的。 

           基本思路

           1.   對象自治和定期自檢。 要管理全域狀態實在太困難了, 比如說為了確保人體健康,要明晰人體每個細胞的狀態, 那是件繁重的工程。 因此, 第一個思路就是對象自治原則。 每個對象自己負責自己的狀態管理和活動。根據需求定期對自己的狀態進行檢查, 以確保自己滿足約束條件;

           2.   局部自治與全域協調。 分而治之總是一把很好的鑰匙。 全域狀態的管理是必要的, 通過分治的方式,劃定局部範圍,每個局部包括若干局部管理者,負責匯總本地區的狀態,並向全域管理者進行彙報; 全域管理者根據戰略目標進行協調和分配。局部管理者必須保證自己地區的合理狀態;

          3.    備份與候補。 總有故障發生的時候, 比如說一個對象或細胞的壞死, 那麼, 就不能因為這麼個極小狀態影響全域。 因此, 局部管理者必須保證其管理範圍內的備份與候補,以保證這個範圍不會因為任何對象的錯誤導致不合理狀態; 同樣,全域管理者亦可採用相應策略。冗餘的優點是保證系統可靠性, 帶來的風險是全域狀態的不一致,狀態同步開銷。   

            

           有時, 利用“純對象”的思維來考慮問題會有點怪異。 考慮一個人拿筆寫字。 那麼,用對象的方式來表達:  究竟是人在寫字,筆在寫字, 還是紙在寫字呢?  一種思考方式是:

                      person.use(pen) ; pen.write(paper) ; paper.outprint(something) .

           是不是有點拐彎抹角的 ? 雖然看上去蠻符合對象思維的。

           情境描述

           1.   相互獨立。 對象A 與對象B 使用各種相互獨立的資源互不干擾地完成各自的活動。 它們唯一的交集是全域環境狀態。 比如一位中國的高中生在中國的操場上打籃球與一個美國的高中生在美國的操場上打籃球。 雖然它們共用全域環境狀態, 只要這種狀態的變更不影響彼此的活動, 基本可以認為是相互獨立的。 換句話說, 這兩個人所處的局部環境是沒有交集的。

           2.   共用資源。 對象 A 與對象 B 共用一台印表機。 它們的交集不僅僅是全域環境狀態,而且有局部環境狀態, 這種環境狀態會影響彼此的活動的進行。 這時候,必須進行順序的協調。基本的方法是: 並發訪問。 至於具體的訪問實現細節,比如你先用幾分鐘我後用幾分鐘, 則依靠協議的約束。

          3.    相互協作。  對象 A 給對象 B 發送郵件, 郵件中含有 B 的重要工作內容, B 在活動中必須給 A 發送郵件,彙報執行的進展。這時候, A 與 B 是相互協調的關係。 B 的活動開始依賴於 A 的活動的完成; 同時, A 必須抽一點時間來查詢 B 的執行狀態, 以決定下一步如何走。基本的方法是: 通知。 這裡可以有一個通知者對象,專門負責彼此的協調或訊息傳遞。 

          具體到一個應用系統,乃至社會活動與發展,往往涉及這三個情境的相互交織,並且具有更多的複雜性。 不過, 使用這種思考方式還是蠻有趣的。

          並發程式設計的基本手段

          有一些基本技術手段用來減少並髮帶來的系統失敗風險,提高並發程式的安全性和可維護性。

           1.     不共用資源;   2.  使用常量和不可變數;

           3.     使用執行個體限定,限制對象的作用範圍和生命週期;

           4.     使用對象封裝,限制對象的訪問路徑;

           5.     使用已有的安全並發組件。

           電腦中的並發 

           1.   IO操作與CPU計算相分離。 IO 操作是典型的慢性子, 而CPU 是急性子, 註定兩者要分離。 事實上, I/0 操作彼此應該都是相互獨立和並發的。IO操作和CPU 計算的並發可以發生在單核CPU 電腦中;

           2.   多核CPU電腦。CPU 總是埋怨 記憶體讀取太慢, 可仔細想想, 一個CPU 佔用一個偌大的記憶體,是不是有點奢侈呢? 於是, 出現了多核CPU電腦。多個核共同佔用一個記憶體,或者,多個核各佔用各自的記憶體。然後一個總的CPU 負責調度所有的活動。 現在有了並發的味道了。

          3.    分布式系統或電腦網路。當電腦互聯後,這種並發的味道更濃了。 多CPU 的並發執行,使得電腦網路的能力更加強大,這就催生了現代互連網的各種奇蹟。從最初的WEB 網站,到分布式系統,高效能並行計算, 再到如今熱火朝天的移動互連網。 

          4.    行動裝置(手機等)。其實相比微電腦、筆記本、平板電腦而言,手機更像“計算細胞”,更容易形成繁榮的計算族群、部落。假設人均持有一台手機裝置,那麼世界將有幾十億個計算細胞,這些計算細胞就如同一個個體一樣並發活動, 足夠構成一個壯觀的計算世界了。

          因此, 學好對象與並發編程, 前程遠大哦!      

          並發的高層語義

          顯然,應用程式開發人員不可能總是在原子語義上思考並發程式的設計和編寫,那就如同用機器語言編寫程式一樣。必須存在精確的並發高層語義,由程式設計語言或作業系統或開發庫提供,比如 Java 的線程類, 或者 Linux 系統的進程函數 fork 。 當執行這些語義時,編譯器或作業系統會根據自身的實現來自動分發和管理並發活動,保證並發活動的順利正確完成。當使用各種高層語義時,必須精確理解這些語義,才能正確使用好,必要的時候必須深入底層實現一探究竟。 海面之上的冰山是蔚為壯觀的,海面之下的冰山則藏著無限豐富的樂趣。

           本文暫時到此為止, 會根據後續思考繼續補充。 

    

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.