/*** created by lengmengwuxie on 2016/7/29.
*/import scala.actors._
import scala.actors.actor._
//設計方式:
// 1,任何模擬物件在所有其他模擬物件完成對時間n的處理之前,都不應該處理時間n+1的事件
// 2,假設要實現所有模擬物件同步執行,使用乙個「時鐘」actor來跟蹤當前的時間
//在選定的時間去傳送ping訊息到所有actor 檢查是否當前時間點的事件都已經被完成
case class ping(time: int)
//模擬物件確認已經處理完畢 返回pong事件
case class pong(time: int, from: actor)
//3,為了模擬物件能夠切確知道自己已經完成了當前時間點的工作,而不是還需要等待與其他actor之間的
//訊息反饋,需要增加兩個限制:
// a,模擬物件從不直接相互傳送訊息,而是相互安排事件日程;
// b,從不向當前時間點提交時間,而是向未來至少比當前多一點的時間提交;
//因此我們需要乙個工作項的日程表,這個日程表也可以在「時鐘」actor上,時鐘actor先為所有模擬物件
//傳送當前時間點所有的工作項的請求之後,才傳送ping訊息。
//工作項訊息
case class workitem(time: int, msg: any, target: actor)
//安排新工作的訊息
case class afterdelay(delay: int, msg: any, target: actor)
//用於要求模型啟動和停止的訊息
case object start
case object stop
//時鐘actor
class clock extends actor
def act(): unit =
} //時間前進
def advance(): unit =
currenttime += 1
println("advacting to time" + currenttime)
processcurrentevents()
for (sim <- allsimulants) //向所有工作中的模擬物件傳送ping
sim ! ping(currenttime)
busysimulants = set.empty ++ allsimulants
} //處理所有在日程表裡時間為currenttime的事件
private def processcurrentevents():unit =
} //react事件處理
def reacttoonemessage(): unit =
} def insert(ag: list[workitem], item: workitem): list[workitem] =
}//不同的被模擬物件之間有的共同行為,將其定義為特質
//simulant是能夠接受模擬訊息stop和ping並於他們合作的任何actor
trait simulant extends actor
def act(): unit =
}} //模擬物件在建立時便啟動執行,安全且方便,在接受到時鐘訊息之前不會做任何事
start()
}
scala的actor的學習一
閱讀過一些actor的例子,在學習scala的actor 一,開發乙個scala檔案,另存actor1.scala檔案到指定的資料夾下,d temp import scala.actors.actor.匯入actor中的方法 package com.study.scala act hello sca...
Actor模型的本質
actor模型的本質已經被強調了無數遍 萬物皆actor。actor之間只有傳送訊息這一種通訊方式,例如,無論是管理員讓工作者幹活,還是工作者把成果交還給管理員,它們之間也要通過傳送訊息的方式來傳遞資訊。這麼做看似不如直接方法呼叫來的直接,但是由於大量的訊息可以同時執行。同樣,訊息讓actor之間解...
Actor模型原理
scala actor執行緒模型可以這樣理解 所有actor共享乙個執行緒池,總的執行緒個數可以配置,也可以根據cpu個數決定 當乙個actor啟動之後,scala分配乙個執行緒給它使用,如果使用receive模型,這個執行緒就一直為該actor所有,如果使用react模型,scala執行完reac...