Scala 並發編程模型Akka(一) Akka簡介

香山上的麻雀 2022-01-07 16:41:51 阅读数:350

scala 模型 akka akka
  1. Akka是JVM平臺上構建高並發、分布式和容錯應用的工具包和運行時,也可以理解成是編寫並發程序的框架。
  2. Akka用Scala語言寫成,同時提供了Scala和JAVA的開發接口。
  3. Akka主要解决的問題是:可以輕松的寫出高效穩定的並發程序,程序員不再過多的考慮線程、鎖和資源競爭等細節。

Actor 模型用於解决什麼問題

  1. 處理並發問題關鍵是要保證共享數據的一致性和正確性,因為程序是多線程時,多個線程對同一個數據進行修改,若不加同步條件,勢必會造成數據污染。但是當我們對關鍵代碼加入同步條件synchronized 後,實際上大並發就會阻塞在這段代碼,對程序效率有很大影響。
  2. 若是用單線程處理,不會有數據一致性的問題,但是系統的性能又不能保證。
  3. Actor 模型的出現解决了這個問題,簡化並發編程,提昇程序性能。 你可以這裏理解:Actor 模型是一種處理並發問題的解决方案,很牛!

Akka 中 Actor 模型

Actor模型及其說明

Scala 並發編程模型Akka(一) Akka簡介_並發模型

  1. Akka 處理並發的方法基於 Actor 模型。(示意圖)
  2. 在基於 Actor 的系統裏,所有的事物都是 Actor,就好像在面向對象設計裏面所有的事物都是對象一樣。
  3. Actor 模型是作為一個並發模型設計和架構的。Actor 與 Actor 之間只能通過消息通信,如圖的信封
  4. Actor 與 Actor 之間只能用消息進行通信,當一個 Actor 給另外一個 Actor發消息,消息是有順序的(消息隊列),只需要將消息投寄的相應的郵箱即可。
  5. 怎麼處理消息是由接收消息的Actor决定的,發送消息Actor可以等待回複,也可以异步處理
  6. ActorSystem 的職責是負責創建並管理其創建的 Actor, ActorSystem 是單例的(可以ActorSystem是一個工廠,專門創建Actor),一個 JVM 進程中有一個即可,而 Acotr 是可以有多個的。
  7. Actor模型是對並發模型進行了更高的抽象。
  8. Actor模型是异步、非阻塞、高性能的事件驅動編程模型。[案例: 說明 什麼是异步、非阻塞, 最經典的案例就是ajax异步請求處理 ]
  9. Actor模型是輕量級事件處理(1GB 內存可容納百萬級別個 Actor),因此處理大並發性能高.

Actor模型工作機制說明

Scala 並發編程模型Akka(一) Akka簡介_發送消息_02
Actor模型的工作機制(對應上圖)

  1. ActorySystem創建Actor
  2. ActorRef:可以理解成是Actor的代理或者引用。消息是通過ActorRef來發送,而不能通過Actor 發送消息,通過哪個ActorRef 發消息,就錶示把該消息發給哪個Actor
  3. 消息發送到Dispatcher Message (消息分發器),它得到消息後,會將消息進行分發到對應的MailBox。(注: Dispatcher Message 可以理解成是一個線程池, MailBox 可以理解成是消息隊列,可以緩沖多個消息,遵守FIFO)
  4. Actor 可以通過 receive方法來獲取消息,然後進行處理。

Actor模型的消息機制(對應上圖)

  1. 每一個消息就是一個Message對象。Message 繼承了Runable, 因為Message就是線程類。
  2. 從Actor模型工作機制看上去很麻煩,但是程序員編程時只需要編寫Actor就可以了,其它的交給Actor模型完成即可。
  3. A Actor要給B Actor 發送消息,那麼A Actor 要先拿到(也稱為持有) B Actor 的 代理對象ActorRef 才能發送消息
版权声明:本文为[香山上的麻雀]所创,转载请带上原文链接,感谢。 https://gsmany.com/2022/01/202201071641511216.html