scala 基礎 5

資料 ? 青牛 ? 于 2017-11-28 16:39:44 ? 最后回復由 hr0905 2019-04-17 17:34:44 ? 4388 閱讀

Actor
為什么要學習actor?
我們現在學的Scala Actor是Scala 2.10.x版本及以前版本的Actor
Scala在2.11.x版本中將Akka加入其中,作為默認的Actor,老版本的Actor已經廢棄
我們學習Actor的目的就是為了學習Akka做鋪墊

什么是Actor?
Actor是消息并發模型
Scala中的Actor能夠實現并行編程的強大功能,它是基于事件模型的并發機制。
Scala是運用消息(message)的發送、接收來實現多線程的。
使用Scala能夠更容易地實現多線程應用的開發。

Java并發編程與Scala Actor編程的區別
Scala的Actor類似于Java中的多線程編程,但是不同的是,Scala的Actor提供的模型與多線程有所不同。
Scala的Actor盡可能地避免鎖和共享狀態,從而避免多線程并發時出現資源爭用的情況。進而提升多線程編程的性能。
此外,Scala Actor的這種模型還可以避免死鎖等一系列傳統多線程編程的問題。
原因就在于Java中多數使用的是可變狀態的對象資源,對這些資源進行共享來實現多線程編程的話,
控制好資源競爭與防止對象狀態被意外修改是非常重要的,而對象狀態的不變性也是較難以保證的。
而在Scala中,我們可以通過復制不可變狀態的資源(即對象,Scala中一切都是對象,連函數、方法也是)的一個副本,
再基于Actor的消息發送、接收機制進行并行編程

Actor方法執行順序
1.調用start()方法啟動Actor
2.執行act()方法
3.向Actor發送消息

發送消息的方式
! 發送異步消息,沒有返回值
!? 發送同步消息,等待返回值
!! 發送異步消息,返回值是Future[Any]

Akka簡介
Spark的RPC是通過Akka類庫實現的,Akka用Scala語言開發,基于Actor并發模型實現
Akka具有高可靠、高性能、可擴展等特點,使用Akka可以輕松實現分布式RPC功能。
Actor是Akka中最核心的概念,它是一個封裝了狀態和行為的對象,Actor之間可以通過交換消息的方式進行通信
每個Actor都有自己的收件箱(MailBox)。通過Actor能夠簡化鎖及線程管理,
可以非常容易地開發出正確地并發程序和并行系統,Actor具有如下特性:
1.提供了一種高級抽象,能夠簡化在并發(Concurrency)/并行(Parallelism)應用場景下的編程開發
2.提供了異步非阻塞的、高性能的事件驅動編程模型
3.超級輕量級事件處理(每GB堆內存幾百萬Actor)

ActorSystem
在Akka中,ActorSystem是一個重量級的結構
他需要分配多個線程,所以在實際應用中,ActorSystem通常是一個單例對象
我們可以使用這個ActorSystem創建很多Actor

Actor
在Akka中,Actor負責通信,在Actor中有一些重要的生命周期方法
1.preStart()方法:該方法在Actor對象構造方法執行后執行,整 個Actor生命周期中僅執行一次
2.receive()方法:該方法在Actor的preStart方法執行完成后執行,用于接收消息,會被反復執行

file
掌握的內容
1.創建Actor
2.Actor的消息接受和發送
3.用Actor并發編程實現WordCount
actor的簡單實現

回復帖子,然后刷新頁面即可查看隱藏內容

版權聲明:原創作品,允許轉載,轉載時務必以超鏈接的形式表明出處和作者信息。否則將追究法律責任。來自海牛部落-青牛,http://hainiubl.com/topics/211
回復數量: 17
暫無評論~~
  • 請注意單詞拼寫,以及中英文排版,參考此頁
  • 支持 Markdown 格式, **粗體**、~~刪除線~~、`單行代碼`, 更多語法請見這里 Markdown 語法
  • 支持表情,可用Emoji的自動補全, 在輸入的時候只需要 ":" 就可以自動提示了 :metal: :point_right: 表情列表 :star: :sparkles:
  • 上傳圖片, 支持拖拽和剪切板黏貼上傳, 格式限制 - jpg, png, gif,教程
  • 發布框支持本地存儲功能,會在內容變更時保存,「提交」按鈕點擊時清空
Ctrl+Enter
沙滩排球