Akka初步介紹

来源:http://www.cnblogs.com/softlin/archive/2016/06/26/5617461.html
-Advertisement-
Play Games

Akka可能很多人都沒有用過,也不知道是什麼,但如果說起Scala或Spark就有很多人都聽說過或使用過 ,這裡簡單說下三者的關係Akka是使用Scala開發的,Spark中使用了Akka作為其消息的通信工具;這篇文章主要 說說Akka的一些特性,做個簡要的介紹; 要說Akka首先要從 併發 開始說 ...


Akka可能很多人都沒有用過,也不知道是什麼,但如果說起Scala或Spark就有很多人都聽說過或使用過 ,這裡簡單說下三者的關係Akka是使用Scala開發的,Spark中使用了Akka作為其消息的通信工具;這篇文章主要 說說Akka的一些特性,做個簡要的介紹;
  要說Akka首先要從併發開始說起,我記得之前我也寫過併發模型相關的文章,併發模型主要有這麼三類:
    1、共用記憶體模型
    2、Actor模型
    3、CSP模型
  共用記憶體模型:是通過使用線程與鎖對共用記憶體進行控制用於實現併發,它依賴於多線程、鎖,會產生過多的線程又使用鎖對競態資源進行同步控制,所以性能不是太高,對編程也不太友好;
  Actor模型:使用Actor作為併發的基礎多個任務之間通過Actor相互發送消息進行通訊,Actor比線程輕量得多,一組Actor使用一個或多個線程所以也就沒有線程、鎖相關影響性能的問題存在,對編程也很友好;
  CSP模型Communicating Sequential Process):為多個進程提供了channel,併發的任務存放於channel當中,Golang的goroutine也是用了類似CSP模式的併發,併在channel中多加一個緩存;
  Actor與CSP模型都提倡:要通過通訊來共用記憶體,不要通過共用記憶體來通訊,這個可以說是他們與共用記憶體模型最大的區別;
  介紹了相關的基本概念,接下來說說今天的主題:Akka
  
  簡單來說Akka就是基於Actor模型實現的併發框架;Akka降低了編寫具有容錯性、可擴展的併發程式的難度,容錯性方面採用了“let it crach(讓它崩潰)模型”;Akka為垂直擴展(併發)、水平擴展(遠程調用)、 高容錯提供了一致的編程模型;Akka具有以下幾種特性:

  Actors:Actor為併發程式提供了簡單高級別的抽象,為非同步、非阻塞、高性能的事件驅動模型,1G記憶體可以容納數百萬個Actor;
  容錯性:使用“let it crach”作為其監控層次體系的核心,監控層次可跨越JVM,使編寫出“永不停機”、“自愈和”的高容錯系統的難度大大降低;
  位置透明:Akka中所有元素都是為了適應分散式而設計的,Actor之間只能通過發送消息進行通訊所有操作均是非同步進行的,不管是本地Actor還是遠程Actor通信方式、操作都是一致的;
  持久性:Actor的狀態、收到的消息可被持久化,並可在Actor啟動或重啟時恢復狀態與消息,不管是JVM崩潰或是節點遷移都適用;

  下麵通過一個Akka程式,然後結束本篇文章;

/**
* Created by linx on 2016-06-26.
*/
class Greeter extends Actor {

  override def receive: Receive = {
    case "greet" =>
      println("hello world")
      val hello = context.actorOf(Props[HelloWorld], "hello")
      hello ! "done"
  }
}
/**
  * Created by linx on 2016-06-26.
*/
class HelloWorld extends Actor {

  override def receive: Receive = {
    case "done" =>
      println("done")
      context.system.shutdown()
  }
}
/**
* Created by linx on 2016-06-26.
*/
object Main {
  def main(args: Array[String]): Unit = {
    val system = ActorSystem("hello")
    val greeter = system.actorOf(Props[Greeter], "greeter")
    greeter ! "greet"
  }
}

  程式先創建一個Greeter Actor然後往該Actor發送“greet”字元串,Greeter Actor收到後列印Hello World,然後創建HelloWorld Actor併發送done,HelloWorld結束整個程式;
程式運行結果:

參考資料:
http://doc.akka.io/docs/akka/2.4.7/scala.html
http://www.solinx.co/archives/464

文章首發地址:Solinx
http://www.solinx.co/archives/612


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 今天在寫框架的時候想把SaeMySQL初始化之後作為全局變數使用。但是後來發現PHP中的全局變數和Java或者OC中的全局變數還是有較大區別的。下麵記錄一下php裡面的global的使用相關註意事項。1.有些場合需要全局變數的出現,如下例子: 上面的代碼的結果為:"myname is" 。而不是期望 ...
  • 【課前思考】 1. 什麼是對象?什麼是類?什麼是包?什麼是介面?什麼是內部類? 2. 面向對象編程的特性有哪三個?它們各自又有哪些特性? 3. 你知道java語言在面向對象編程方面有何獨特的特點嗎? 難點: 1. 理解方法重載和方法重寫,不要混淆了兩者的使用。 2. 類變數和類方法的使用。 3. 接 ...
  • 前言: 目前在研究易信公眾號,想給公眾號增加一個獲取個人交通違章的查詢菜單,通過點擊返回查詢數據。以下是實施過程。 一、首先,用火狐瀏覽器打開XX省交管網,分析頁面信息: 可以看到共有4種查詢種類,我只要查詢違章數據,所以分析第一個電子警察信息查詢就好了,用firebug分別查看車牌號碼、車輛識別碼 ...
  • 搭建輕量級Java Web框架快速搭建開發框架如何載入配置文件如何實現一個簡單的 IOC 容器如何載入指定的類如何初始化框架 *註解開發 目標:打造一個輕量級的 MVC 框架,Controller 是MVC的核心,類似於 SpringMVC。通過 Controller 註解來定義 Controlle ...
  • 這是我對指針學習的歸納記載,如有疑問歡迎聯繫作者本人一起探討~ 尊重作者的勞動,轉載請記得註明來源:http://www.cnblogs.com/weifeng727/p/5584151.html ...
  • 一、什麼是字典? 字典是Python語言中唯一的映射類型。 映射類型對象里哈希值(鍵,key)和指向的對象(值,value)是一對多的的關係,通常被認為是可變的哈希表。 字典對象是可變的,它是一個容器類型,能存儲任意個數的Python對象,其中也可包括其他容器類型。 字典類型與序列類型的區別: 1. ...
  • (期末考試快到了,所以比較粗糙,請各位讀者理解。。) 一、 概念 DBSCAN是一種產生劃分聚類的基於密度的聚類演算法,簇的個數由演算法自動地確定。低密度區域中的點被視為雜訊而忽略,因此DBSCAN不產生完全聚類。 二、 偽代碼 1 將所有點標記為核心點、邊界點和雜訊點。 2 刪除雜訊點。 3 為距離在 ...
  • 編寫一個簡單的留言簿,實現添加留言和顯示留言內容的功能 運行: ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...