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
}/**
* created by linx on 2016-06-26.
*/class helloworld extends actor
}/**
* created by linx on 2016-06-26.
*/object main
}
程式先建立乙個greeter actor然後往該actor傳送「greet」字串,greeter actor收到後列印hello world,然後建立helloworld actor並傳送done,helloworld結束整個程式;
程式執行結果:
akka 介紹 Actor 基礎
actors actors 是乙個非常輕的併發例項,基於事件驅動的非同步資訊處理.模式匹配是actor處理資訊的手段。它是對併發 鎖 分布系統的高度抽象。你只需要關注工作流。例子 package akka.io import akka.actor.actorlogging import akka.a...
vue初步介紹
摘要 vue.js 讀音類似於view 是一套構建使用者介面的漸進式框架。與其他重量級框架不同的是,vue 採用自底向上增量開發的設計。vue 的核心庫只關注檢視層,它不僅易於上手,還便於與第三方庫或既有專案整合。vue.js 讀音類似於view 是一套構建使用者介面的漸進式框架。與其他重量級框架不...
HTTPS 初步介紹
非對稱加密 基於數學方法,生成乙個公鑰 金鑰對,來對資料做加密 解密,被公鑰加密的資料只能被私鑰解密,同樣,被私鑰加密的資料也只能被公鑰解密。所以可以用別人公開的公鑰加密一段資訊然後傳送出去,只有擁有對應金鑰的那個人才能解密。但是缺點是加密 解密的計算成本高,比較占用cpu資源 對稱加密 和非對稱加...