有時~指定事件相互獨立, 共同時作且同時發生, 有助於我們設計更高效的程序:Scala Actor model 是一個事件基礎(Event-based)相較 Java Thread 更為輕量級的共時同作模型, 且帶來更佳的開發思維.- WisdomFish.ORG Scala 傾向於建議採函數式編程風格來開發多執行緒, 用 不可變狀態(immutable state) 撰寫 無鎖(lock-free)的程式碼. Scala 提供 Actor 是 Scala 中多執行緒(Threads)的基礎,核心思想是利用 訊息傳遞(Message Passing) 來進行輕量級 Thread 間的資訊共享和同步。 消除 Thread 間對資料競爭的困競, 並且不需思考如何加鎖與釋放鎖帶來的困境.
不可變物件, 也就不需再思考多執行緒存取物件時的競爭管理!!!
Scala Actor Thread 模型
Scala Actor Thread 模型可以這樣來理解它:
- Actor model 依賴於不變性, 將 immutable ojbects 當作 message 在 actor 間 passing.
- 所有 Actor 共享一個線程池,總線程個數可以配置,也可以根據 CPU 個數決定;
- 當一個 Actor 啟動之 後,Scala 分配一個線程給它使用,
- 如果使用 receive 模型,這個線程就一直為該 Actor 所有,
- 如果使用 react 模型,Scala 執行完 react 方法後拋出異常,則該線程就可以被其它 Actor 使用。
不變物件(Immutable object)
- 不變物件因沒有狀態可被改變, 故無需顧慮資料競爭問題, 從根本上解決了 Java Thread 帶來的先天問題
- 若想改變, 只要另創建一個 immutable object 即可
- 先天即為線程安全(thread safe), 可自由地在 thread 間傳遞, 不必對其進行同步(synchronize)
- 無複雜的狀態轉換, 簡潔易用, 問題相對少, 也較易驗驗證正確性
- 易於在應用間共享與重用, 降低應用資源負擔 - Flyweight pattern
Scala守則:促進不變性盡可能將可變性降至最低!!!
相較於 Erlang 相較於 Erlang 有二項優勢,- Scala 是強型別編程
- Scala 運行於 JVM 可輕易的結合龐大的 Java API 與資源
- Actors 非常輕量,大約 600 per/byte,推算 4GB RAM 可以容納 6.5 百萬個 Actors.
Package scala.actor._
- scala.actor._
- scala.actor.remote._
- scala.actor.scheduler._
obejct extends Actor / def act( )
trait Actor
`abstract' modifier can be used only for classes; it should be omitted for abstract members
http://developer.51cto.com/art/200908/141150.htm
react()/複用Thread獲取高性能
- Scala Actor 建構在 Java Thread 之上, 實際上 actor/per 都必要有 self 的 thread, 這樣 act( ) 才有機會運作.
- Java Thread 的開銷並不低, 耗 RAM, JVM 可能有數以百萬計的物件, 但卻可能僅能納數千 Thread.
- 切換 Thread 要有數百到數千不等的處理器指令.
Examples
References
- Scala.ORG, Scala Actors: A Short Tutorial, http://www.scala-lang.org/node/242
- 51cto.comScala Actor:多線程的基礎學習, http://developer.51cto.com/art/200908/141150.htm
- 新的Scala Actor類型系統—誰說競爭安全與性能不可兼得 作者 Sadek Drobi 譯者 韓鍇 發佈於 2009年8月2日
- A Type System for Scala Actors to Enforce Race Safety Without Sacrificing Performance
- Paper, http://lamp.epfl.ch/~phaller/uniquerefs/
- The busy Java developer's guide to Scala: Dive deeper into Scala concurrency, http://www.ibm.com/developerworks/java/library/j-scala04109.html
- 中文:面向 Java 開發人員的 Scala 指南: 深入瞭解 Scala 並發性, http://www.ibm.com/developerworks/cn/java/j-scala04109.html
- http://developer.51cto.com/art/201001/178665.htm
從Java走進Scala:一步步教你使用Scala Actor(1), http://developer.51cto.com/art/200908/144044.htm 从Kestrel看Scala的核心程序模块 |
|