中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

基于角色模型的Java 開發是怎樣的

發布時間:2021-10-23 17:58:20 來源:億速云 閱讀:140 作者:柒染 欄目:編程語言

這篇文章將為大家詳細講解有關基于角色模型的Java 開發是怎樣的,文章內容質量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關知識有一定的了解。

對于軟件開發人員而言,調試多線程應用程序中的非確定缺陷是最痛苦的工作。因此,像大多數人一樣,我鐘愛使用 Erlang 和 Scala 等函數語言進行并發編程。

Scala 和 Erlang 都采用了角色模型來進行并發編程,沒有采用線程概念。圍繞角色模型的創新并不僅限于語言本身,角色模型也可供 Kilim 等基于 Java 的角色框架使用。

Kilim 對角色模型的使用非常直觀,稍后您將看到,該庫使構建并發應用程序變得異常簡單。

多核挑戰

在 2005 年,Herb Sutter 編寫了一篇現在仍然頗為著名的文章 “The Free Lunch is Over: A Fundamental Turn Toward Concurrency in Software”。在這篇文章中,他摒棄了一直誤導著人們的觀念,那就是摩爾定律將繼續促進越來越高的 CPU 時鐘速率。

Sutter 預言了 “免費午餐” 的終結,通過越來越快的芯片來捎帶提升軟件應用程序的性能將不再可能。相反,他認為應用程序性能的顯著提升將需要利用多核芯片架構來實現。

事實證明他是對的。芯片制造商已經達到了一種硬性限制,芯片速率已穩定在 3.5 GHz 左右多年了。隨著制造商越來越快地增加芯片上的核心數量,摩爾定律在多核領域繼續得以滿足。

Sutter 還提到并發編程將使開發人員能夠利用多核架構。但是,他補充道,“相比如今的各種語言提供的編程模型,我們亟需一種更高級的并發編程模型。”

Java 等語言的基本編程模型是基于線程的。盡管多線程應用程序并不是很難編寫,但正確 編寫它們仍然面臨許多挑戰。并發編程的一個困難之處是利用線程來考慮并發性。如今已有許多并發模型,一種特別有趣并獲得了 Java 社區認可的模型就是角色模型。

角色模型

角色模型是一種不同的并發進程建模方式。與通過共享內存與鎖交互的線程不同,角色模型利用了 “角色” 概念,使用郵箱來傳遞異步消息。在這里,郵箱 類似于實際生活中的郵箱,消息可以存儲并供其他角色檢索,以便處理。郵箱有效地將各個進程彼此分開,而不用共享內存中的變量。

角色充當著獨立且完全不同的實體,不會共享內存來進行通信。實際上,角色僅能通過郵箱通信。角色模型中沒有鎖和同步塊,所以不會出現由它們引發的問題,比如死鎖、嚴重的丟失更新問題。而且,角色能夠并發工作,而不是采用某種順序方式。因此,角色更加安全(不需要鎖和同步),角色模型本身能夠處理協調問題。在本質上,角色模型使并發編程更加簡單了。

角色模型并不是一個新概念,它已經存在很長時間了。一些語言(比如 Erlang 和 Scala)的并發模型就是基于角色的,而不是基于線程。實際上,Erlang 在企業環境中的成功(Erlang 由 Ericsson 創建,在電信領域有著悠久的歷史)無疑使角色模型變得更加流行,曝光率更高,而且這也使它成為了其他語言的一種可行的選擇。Erlang 是角色模型更安全的并發編程方法的一個杰出示例。

不幸的是,角色模型并沒有植入到 Java 平臺中,但我們可以通過各種方式使用它。JVM 對替代語言的開放性意味著您可以通過 Java 平臺語言(比如 Scala 或 Groovy)來利用角色(參見 參考資料,了解 Groovy 的角色庫 GPars)。另外,您可以試用一種支持角色模型且基于 Java 的庫,比如 Kilim。

Kilim 中的角色

Kilim 是一個使用 Java 編寫的庫,融入了角色模型的概念。在 Kilim 中,“角色” 是使用 Kilim 的 Task 類型來表示的。Task 是輕量型的線程,它們通過 Kilim 的 Mailbox 類型與其他 Task 通信。

Mailbox 可以接受任何類型的 “消息”。例如,Mailbox 類型接受 java.lang.Object。Task 可以發送 String 消息或者甚至自定義的消息類型,這完全取決于您自己。

在 Kilim 中,所有實體都通過方法簽名捆綁在一起,如果您需要同時執行幾項操作,可以在一個方法中指定該行為,擴大該方法的簽名以拋出 Pausable。因此,在 Kilim 中創建并發類就像在 Java 中實現 Runnable 或擴展 Thread 一樣簡單。只是使用 Runnable 或 Thread 的附加實體(比如關鍵字 synchronized)更少了。

***,Kilim 的魔力是由一個稱為 weaver 的后期進程來實現的,該進程轉換類的字節碼。包含 Pausable throws 字句的方法在運行時由一個調度程序處理,該調度程序包含在 Kilim 庫中。該調度程序處理有限數量的內核線程。可以利用此工具來處理更多的輕量型線程,這可以***限度地提高上下文切換和啟動的速度。每個線程的堆棧都是自動管理的。

在本質上,Kilim 使創建并發進程變得輕松而簡單:只需從 Kilim 的 Task 類型進行擴展并實現 execute 方法。編譯新創建的支持并發性的類之后,對其運行 Kilim 的 weaver,您會實現顯著的性能提升!

Kilim 最初是一種外來語言,但它帶來了巨大的回報。角色模型(以及后來的 Kilim)使編寫依賴于類似對象的異步操作對象變得更加簡單和安全。您可以 使用 Java 的基本線程模型進行同樣的操作(比如擴展 Thread),但這更具挑戰性,因為它會將您帶回鎖和同步的世界中。簡而言之,將您的并發編程模型轉換為角色使多線程應用程序更容易編碼。

關于基于角色模型的Java 開發是怎樣的就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

张北县| 纳雍县| 静乐县| 寿阳县| 永顺县| 翼城县| 航空| 大新县| 长武县| 鄂伦春自治旗| 奎屯市| 普宁市| 西充县| 岳池县| 定边县| 井研县| 修文县| 邵阳市| 全南县| 汾西县| 都匀市| 辰溪县| 庆安县| 南宫市| 开远市| 义马市| 湟中县| 南陵县| 灵台县| 常山县| 南木林县| 高淳县| 刚察县| 邵武市| 温宿县| 华安县| 噶尔县| 兰西县| 日照市| 湖南省| 普安县|