日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Actors编程模型

發(fā)布時間:2023/12/18 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Actors编程模型 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

  Actors模型(Actor model)首先是由Carl Hewitt在1973定義, 由Erlang OTP (Open Telecom Platform) 推廣,其 消息傳遞更加符合面向對象的原始意圖。 Actors屬于并發(fā)組件模型 ,通過組件方式定義并發(fā)編程范式的高級階段,避免使用者直接接觸多線程并發(fā)或線程池等基礎概念。

   傳統(tǒng)多數流行的語言并發(fā)是基于多線程之間的共享內存,使用同步方法防止寫爭奪,Actors使用消息模型,每個Actors在同一時間處理最多一個消息,可以發(fā)送消息給其他Actors,保證了單獨寫原則?。從而巧妙避免了多線程寫爭奪。

   Actors模型的特點是:

    • 隔離計算實體
    • "Share nothing"
    • 沒有任何地方同步
    • 異步消息傳遞
    • 不可變的消息 消息模型類似mailbox / queue

   AKKA框架是一個實現Actors模型的Scala或Java平臺,靈感來自ERlang,能更輕松地開發(fā)可擴展,實現多線程安全應用。

  Actors是一個輕量級的對象,通過發(fā)送消息實現交互。每個Actors在同一時間處理最多一個消息,可以發(fā)送消息給其他Actors。在同一時間可以于一個Java虛擬機存在數以百萬計的參與者,構架是一個分層的父層(管理) - 子層,其中父層監(jiān)控子層的行為。還可以很容易地擴展Actor運行在集群中各個節(jié)點之間 - 無需修改一行代碼。每個演員都可以有內部狀態(tài)(字段/變量) ,但通信只能通過消息傳遞,不會有共享數據結構(計數器,隊列) 。Akka框架支持兩種語言Java和Scala,

?

WhatsApp成功背后的Erlang語言

Actor模型和CSP模型的區(qū)別

高級并發(fā):Akka Actors和JavaEE7的EJB比較

Akka教程

AKKA框架介紹

使用Akka發(fā)送1000萬消息

使用Akka實現MapReduce的單詞計數

Akka+ZeroMQ消息生產者和消費者

軟件事務內存STM

RXJAVA的Observable和AKKA ACTOR綜合使用

為什么Actor模型是高并發(fā)事務的終極解決方案?

actor并發(fā)模型&基于共享內存線程模型

Spray + Akka高性能異步IO并發(fā)

使用Scala的Akka HTTP,Akka Stream和Reactive Mongo建立REST服務

單獨寫原則

LMAX架構

go reactive宣言

Scala入門之函數編程

Scala入門之基本概念

vertx入門教程

使用Kafka和ZeroMQ實現分布式Quasar Actor

?

相關參考

Actors模型更多專題

AKKA更多專題

reactive編程

Scala專題

Disruptor專題

并發(fā)編程

性能專題

EDA事件驅動專題

?

?

過去十幾年CPU一直遵循著摩爾定律發(fā)展,單核頻率越來越快,但是最近這幾年,摩爾定律已然失效,CPU的工藝制程和發(fā)熱穩(wěn)定性之間難以取舍,取而代之的策略則是增加核心數量,目前家用電腦四核已經非常常見,服務器更是達到了32核64線程。為了有效地利用多核CPU,我們在代碼層面就應該考慮到并發(fā)性。十幾年的痛苦開發(fā)經歷告訴我們,threads并不是獲取并發(fā)性的好方法,往往會帶來難以查找的bug,但是不用害怕,今天我們有很多其他方法來獲得易用的并發(fā)性,比如我們接下來介紹的Actor模型。

模型 Model

Actor模型是一個概念模型,用于處理并發(fā)計算。它定義了一系列系統(tǒng)組件應該如何動作和交互的通用規(guī)則,最著名的使用這套規(guī)則的編程語言是Erlang。這篇文章更關注模型本身而不是它在不同語言的實現。

Actors

一個Actor指的是一個最基本的計算單元。它能接收一個消息并且基于其執(zhí)行計算。

這個理念很像面向對象語言,一個對象接收一條消息(方法調用),然后根據接收的消息做事(調用了哪個方法)。

Actors一大重要特征在于actors之間相互隔離,它們并不互相共享內存。這點區(qū)別于上述的對象。也就是說,一個actor能維持一個私有的狀態(tài),并且這個狀態(tài)不可能被另一個actor所改變。

聚沙成塔

One ant is no ant, one actor is no actor.
光有一個actor是不夠的,多個actors才能組成系統(tǒng)。在actor模型里每個actor都有地址,所以它們才能夠相互發(fā)送消息。

Actors有郵箱

只得指明的一點是,盡管許多actors同時運行,但是一個actor只能順序地處理消息。也就是說其它actors發(fā)送了三條消息給一個actor,這個actor只能一次處理一條。所以如果你要并行處理3條消息,你需要把這條消息發(fā)給3個actors。

消息異步地傳送到actor,所以當actor正在處理消息時,新來的消息應該存儲到別的地方。Mailbox就是這些消息存儲的地方。

Actors通過異步消息溝通,在處理消息之前消息被存放在Mailbox中

Actors做什么

當一個actor接收到消息后,它能做如下三件事中的一件:

  • Create more actors; 創(chuàng)建其他actors
  • Send messages to other actors; 向其他actors發(fā)送消息
  • Designates what to do with the next message. 指定下一條消息到來的行為

前兩件事比較直觀,第三件卻很有意思。

我之前說過一個actor能維持一個私有狀態(tài)。「指定下一條消息來到做什么」意味著可以定義下條消息來到時的狀態(tài)。更清楚地說,就是actors如何修改狀態(tài)。

設想有一個actor像計算器,它的初始狀態(tài)是數字0。當這個actor接收到add(1)消息時,它并不改變它原本的狀態(tài),而是指定當它接收到下一個消息時,狀態(tài)會變?yōu)?。

容錯 Fault tolerance

Erlang 引入了「隨它崩潰」的哲學理念,這部分關鍵代碼被監(jiān)控著,監(jiān)控者的唯一職責是知道代碼崩潰后干什么(如將這個單元代碼重置為正常狀態(tài)),讓這種理念成為可能的正是actor模型。

每段代碼都運行在process中,process是erlang稱呼actor的方式。這個process完全獨立,意味著它的狀態(tài)不會影響其他process。我們有個supervisor,實際上它只是另一個process(所有東西都是actor),當被監(jiān)控的process掛了,supervisor這個process會被通知并對此進行處理。這就讓我們能創(chuàng)建「自愈」系統(tǒng)了。如果一個actor到達異常狀態(tài)并崩潰,無論如何,supervisor都可以做出反應并嘗試把它變成一致狀態(tài),這里有很多策略,最常見的是根據初始狀態(tài)重啟actor。

分布式 Distribution

另一個關于actor模型的有趣方面是它并不在意消息發(fā)送到的actor是本地的或者是另外節(jié)點上的。

轉念一想,如果actor只是一些代碼,包含了一個mailbox和一個內部狀態(tài),actor只對消息做出響應,誰會關注它運行在哪個機器上呢?只要我們能讓消息到達就行了。這允許我們基于許多計算機上構建系統(tǒng),并且恢復其中任何一臺。

進一步了解

這里是一個快速的概念模型回顧,其中的概念被運用到許多知名語言和庫中,比如Erlang和Elixir, Akka (for the JVM) 和 Celluloid (for Ruby)。

如果你想更深入了解actor及其背后的原理,你可以進一步閱讀下面書籍和文章:

  • Seven Concurrency Models in Seven Weeks: When Threads Unravel
  • Programming Elixir
  • Elixir in Action
  • Actor模型
  • 為什么Actor模型是高并發(fā)事務的終極解決方案?

這個視頻比較完整地討論了Actor的概念模型。
The Actor Model (everything you wanted to know)

Scala或Erlang的進程信箱都是一種Actor模型,也有Java的專門的Actor模型,這里是幾種Actor模型比較明白了Actor模型原理,使用Disruptor這樣無鎖隊列也可以自己實現Actor模型,讓一個普通對象與外界的交互調用通過Disruptor消息隊列實現,比如LMAX架構就是這樣實現高頻交易,從2009年成功運行至今,被Martin Fowler推崇。

原文地址: http://www.brianstorti.com/the-actor-model/



作者:時見疏星
鏈接:https://www.jianshu.com/p/449850aa8e82
來源:簡書
著作權歸作者所有。商業(yè)轉載請聯系作者獲得授權,非商業(yè)轉載請注明出處。

?

?

轉載于:https://www.cnblogs.com/cjm123/p/8245587.html

總結

以上是生活随笔為你收集整理的Actors编程模型的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。