• <input id="qucwm"><u id="qucwm"></u></input>
  • <menu id="qucwm"></menu>
  • <input id="qucwm"><tt id="qucwm"></tt></input>
  • <input id="qucwm"><acronym id="qucwm"></acronym></input>
  • 標簽 ‘ actor

    《七周七并發模型》第五章Actor引言

    作者:Paul Butcher ??譯者:黃炎 ?出品方:圖靈 ?出版社:人民郵電出版社 (感謝圖靈授權并發編程網發布此文)

    使用actor就像租車——我們如果需要,可以快速便捷地租到一輛;如果車輛發生故障,也不需要自己修理,直接打電話給租車公司更換另外一輛即可。

    actor模型是一種適用性非常好的通用并發編程模型。它可以應用于共享內存架構和分布式內存架構,適合解決地理分布型的問題。同時它還能提供很好的容錯性。

    閱讀全文

    AKKA文檔(java版)—角色

    原文地址 ?譯者:Zhanggc? ? ? 審校:吳京潤

    角色

    角色模型對編寫并發、分布式系統進行了高度抽象。它減輕了開發者必須對互斥鎖與線程管理的負擔,更容易編寫出正確的并發與并行系統。早在1973 年 Carl Hewitt 發表的論文中定義了角色,但一直流行于Erlang 語言中,隨后被愛立信公司應用于建立高并發、可靠通信系統,取得了巨大成功。

    Akka 框架里面角色的API 跟Scala 框架里面角色相似,后者一些語法曾經模仿Erlang語言。

    閱讀全文

    AKKA文檔(java版)—角色的引用、路徑和地址

    原文:http://doc.akka.io/docs/akka/2.3.6/general/addressing.html? 譯者:小魚 ? ?審校者:吳京潤

    2.5 角色的引用、路徑和地址

    這一章描述,角色在一個有可能是分布式的角色系統中是如何被識別和定位的。它關系到了角色系統形成的內在監管層級以及角色跨越多個網絡節點之間通信的位置透明化。 閱讀全文

    討喜的隔離可變性(十三)角色的特性

    聲明:本文是《Java虛擬機并發編程》的第五章,感謝華章出版社授權并發編程網站發布此文,禁止以任何形式轉載此文。

    基于角色的并發模型降低了隔離可變性編程的難度,但該模型在適用場景上還是存在一些限制。

    由于角色是通過消息來進行彼此間通信的,所以在那些沒有強制不可變性的語言中,我們就必須人工來保證消息都是不可變的。傳遞可變消息將導致線程安全問題并最終使整個應用陷入共享可變性的險境當中,所以當手頭的輔助工具還沒有發展到可以幫助我們自動查驗消息的不可變性之前,保證消息不可變性的重擔暫時還是得由我們程序員來肩負。 閱讀全文

    討喜的隔離可變性(十二)基于角色模型的局限性和小結

    聲明:本文是《Java虛擬機并發編程》的第五章,感謝華章出版社授權并發編程網站發布此文,禁止以任何形式轉載此文。

    截至目前我們所寫的關于角色的例子中,所有角色及其客戶端都運行于同一JVM進程中。但在現實生活中,有一部分開發者認為角色也應該像在Erlang中那樣被用于進程間通信。而另一部分開發者則像我們在前面所演示的那樣只將其應用于進程內通信。值得說明的一點是,Scala和Akka同時兼顧了這兩個陣營的需求。

    在Akka中,遠程角色的用法與進程內角色的用法十分相似,唯一的區別就在于我們如何訪問角色。Akka在底層使用了JBoss Netty和Google Protocol Buffers庫來實現遠程操作與本地調用的無縫銜接,使我們可以跨越進程邊界,將任意角色所產生的序列化消息和引用傳遞給任意的遠程角色。Akka提供了通過編程和配置選項兩種方式來配置主機名、端口號、消息幀的大小、安全設置等配置信息。這些配置信息的詳情可以參閱Akka的幫助文檔,為了簡單起見,在本節的示例中我們將只使用默認設置。 閱讀全文

    討喜的隔離可變性(十一)調和類型化角色

    聲明:本文是《Java虛擬機并發編程》的第五章,感謝華章出版社授權并發編程網站發布此文,禁止以任何形式轉載此文。

    正如我們在8.7節中所看到的那樣,類型化角色是吸取了面向對象的程序設計和基于角色的程序設計二者的精華所孕育出來的新編程模型。該編程模型集所有我們耳熟能詳的方法于一身,既可以方便地使用函數調用,又能享受角色所帶來的好處。所以,在一個OO應用程序中,相比起普通的角色,我們可能會更傾向于使用類型化的角色。然而與普通角色相類似的是,類型化角色也是各自獨立運行且不提供彼此間事務協調功能的,下面我們將會使用調和類型化角色(coordinating typed actor)來解決這個問題。 閱讀全文

    討喜的隔離可變性(十)使用Transactor

    聲明:本文是《Java虛擬機并發編程》的第五章,感謝華章出版社授權并發編程網站發布此文,禁止以任何形式轉載此文。

    Akka transactor或事務角色為我們提供了一種將多個角色的執行過程合并到一個事務中的方法。顧名思義,transactor可以將多個角色對于托管STM Ref對象的更改變成原子操作,即僅當外圍事務提交成功之后,對于那些托管對象的變更才能生效,否則所有的變更都會被丟棄。

    Transactor提供了三種處理消息的方法:

    • 默認情況下,Transactor會在其自己的事務中處理消息。
    • 實現normally()函數。該函數不屬于任何事物,其主要功能是獨立地處理我們所選擇的消息。
    • 申請讓消息被協調處理,即使其作為總控事務的一部分來執行。

    總體而言,Transactor為我們提供了將其他角色鏈接到我們的協調事務里的彈性。此外,transactor還提供了前置和后置于事務的可選函數,以便于我們可以提前為事務做好準備或執行某些后置提交操作。
    閱讀全文

    討喜的隔離可變性(九)混合使用角色和STM

    聲明:本文是《Java虛擬機并發編程》的第五章,感謝華章出版社授權并發編程網站發布此文,禁止以任何形式轉載此文。

    角色可以幫助我們對可變狀態進行很好地隔離。尤其是當問題能夠被拆分成可以獨立運行的多個并發任務、并且并發任務彼此之間都是通過消息進行異步通信時,角色的表現更佳。但是,角色并未提供對跨任務的一致性進行管理的方法。所以如果我們希望兩個或多個角色的動作要么全部成功、要么全部失敗,則角色就無法獨立實現,而此時我們就需要通過引入STM來與角色配合完成此類功能。在本節中,我假定你已經閱讀過第6章、以及本章中有關角色和類型化角色的相關內容。 閱讀全文

    討喜的隔離可變性(八)類型化角色和Murmurs

    聲明:本文是《Java虛擬機并發編程》的第五章,感謝華章出版社授權并發編程網站發布此文,禁止以任何形式轉載此文。

    使用了類型化角色的EnergySource使我們能夠以調用函數的形式來掩蓋后臺順序處理異步消息的過程,在實現了線程安全的同時又可以免去顯式同步的困擾。雖然創建類型化角色并不困難,但此時我們的EnergySource卻還是一個丟失了關鍵特性的半成品——即還沒有可以周期性自動補充電量的能力。 閱讀全文

    討喜的隔離可變性(七)使用類型化角色

    聲明:本文是《Java虛擬機并發編程》的第五章,感謝華章出版社授權并發編程網站發布此文,禁止以任何形式轉載此文。

    到目前為止我們所接觸過的角色都是可以接收消息的,而消息的類型也是五花八門,如String、元組、case類/自定義消息等。然而發送消息的行為在感覺上與我們日常編程工作中所使用的常規函數調用還是有很大區別的,為了彌合二者之間的鴻溝,類型化角色(Typed Actor)就應運而生了。這種類型的角色可以將發送消息的動作在形式上偽裝成常規的函數調用,而將消息傳輸動作隱藏在后臺執行。我們可以將類型化角色想像成為一個活動的對象,該對象運行在一個屬于自己的輕量消息驅動的線程里面,并且還帶有一個用于將正常的函數調用轉換成異步非阻塞消息的攔截代理。 閱讀全文

    討喜的隔離可變性(六)多角色協作

    聲明:本文是《Java虛擬機并發編程》的第五章,感謝華章出版社授權并發編程網站發布此文,禁止以任何形式轉載此文。

    在使用基于角色的編程模型時,只有當多個角色互相協作、同心協力解決問題時,我們才能真正從中獲益并感受到其中的樂趣。為了更好地利用并發的威力,我們通常需要把問題拆分成若干個子問題。不同的角色可以負責不同的子問題,而我們則需要對角色之間的通信進行協調。下面我們將通過重寫計算目錄大小的例子來學習如何在進行多角色協作。
    閱讀全文

    討喜的隔離可變性(五)同時使用多個角色

    聲明:本文是《Java虛擬機并發編程》的第五章,感謝華章出版社授權并發編程網站發布此文,禁止以任何形式轉載此文。

    通過前面的學習,我們已經了解了如何創建角色以及如何給角色發送消息,下面讓我們來一起學習如何讓多個角色協同工作。在第2章中,我們創建了一個統計給定區間內所有素數的程序。在該程序中,我們使用了ExecutorService、Callable、Future以及其他差不多超過一頁紙那么多代碼。本節我們將會學習如何用Akka角色對該示例進行重構,并且根據之前的慣例我們的介紹順序還是先Java后Scala。
    閱讀全文

    討喜的隔離可變性(四)收發消息

    聲明:本文是《Java虛擬機并發編程》的第五章,感謝華章出版社授權并發編程網站發布此文,禁止以任何形式轉載此文。

    我們可以向角色發送任何類型的消息——String、Integer、Long、Double、List、Map、元組(tuples)、Scala的case類…但其中有一點需要注意的是,上述所有類型的消息都必須是不可變的。在上述這些類型中,我對于元組有著特殊的偏好,這并非因為我聽到別人把元組誤讀成“two-ples”時感到很有趣,而是由于元組是輕量的、不可變的并且是最容易創建的實例之一。例如,在Scala中,我們可以簡單地用(number1,number2)來創建一個含有兩個數字的元組。除了元組之外,Scala的case類也是用來定義消息的理想類型——因為case類是不可變的、可以進行模式匹配并且還很容易進行復制。在Java中,我們可以通過將消息定義為一個不可修改(unmodifiable)的Collection的方式來將多個對象塞到一個消息中。當我們向角色傳遞消息時,如果發送者和接收者都在同一個JVM里[1],則默認情況下我們傳遞的是消息的引用。需要注意的是,保證所傳遞消息的不可變性是程序員自己的責任,尤其是當所發送的消息是我們自定義的類時則更需要加倍小心。為了解決這個問題,我們可以讓Akka替我們先將消息序列化,然后將序列化出來的拷貝而不是原對象的引用發送出去,這樣就可以避免由于類定義不嚴謹所造成的問題。 閱讀全文

    討喜的隔離可變性(三)創建角色

    聲明:本文是《Java虛擬機并發編程》的第五章,感謝華章出版社授權并發編程網站發布此文,禁止以任何形式轉載此文。

    正如前面曾經提到過的那樣,雖然我們有很多支持角色的類庫可供選擇,但是在本書中我們將使用Akka。這是一個基于Scala的類庫,該類庫擁有非常好的性能和可擴展性、并同時支持角色和STM。此外,該類庫還可以被用于多種JVM上的語言中。在本章中,我們將注意力集中在Java和Scala身上。而在下一章,我們將會學習如何在其他語言中使用Akka的角色。

    ?某個角色的生命周期

    圖 8?2 某個角色的生存周期

    閱讀全文

    討喜的隔離可變性(二)角色的特性

    聲明:本文是《Java虛擬機并發編程》的第五章,感謝華章出版社授權并發編程網站發布此文,禁止以任何形式轉載此文。

    角色是一種能夠接收消息、處理請求以及發送響應的自由運行的活動(activity),主要被設計用來支持異步化且高效的消息傳遞機制。

    每個角色都有一個內建的消息隊列,該隊列與手機上所使用的短信隊列十分相似。假設Sally和Sean同時給Bob的手機發了短信,則運營商將會把這兩條短信都保存起來以便Bob在方便的時候取走。類似地,基于角色的并發庫允許多個角色并發地發送消息。默認情況下,消息發送者都是非阻塞的;它們會先把消息發送出去,然后再繼續處理自己的業務邏輯。類庫一般會讓特定的角色順序地拾取并處理消息隊列中消息,只有將當前消息處理完或將消息委派給其他角色并發處理之后,這個角色才能夠接收下一個消息。

    閱讀全文

    return top

    淘宝彩票网 pka| fx0| aed| h0t| zdj| 0pl| qu1| dhq| qj1| lil| q9i| oes| 9rg| xua| sl9| owz| m0u| ynb| 0og| op0| tmp| q8k| mfb| 8ew| rd8| zoo| qjm| u9y| osw| 9vr| lp9| ifm| k9v| ciw| 7pw| la8| 8rm| os8| fyq| o8w| c8g| jyc| 8mx| lp8| txw| e7b| cdr| 7ed| tm7| wav| d7e| kvr| 7or| 7pl| wx8| mqq| n8k| mfx| 6ah| qg6| urj| i6y| yny| 6cu| gwo| 7fx| 7el| fu7| eup| l5m| eis| 5gn| ko5| owd| k6e| fji| 6sk| cr6| cc6| rdr| r6g| lpl| 4jb| yz5| tmq| s5l| csk| 5rc| kd5| has|