3
據我所知,Scala管理一個線程池來運行actor,在它們之間共享線程。我可以設置一個特定的演員獨立運行在一個單獨的線程中,絕不會與另一個演員共享它嗎?如何設置一個Scala actor以獨佔使用一個單獨的線程來運行?
據我所知,Scala管理一個線程池來運行actor,在它們之間共享線程。我可以設置一個特定的演員獨立運行在一個單獨的線程中,絕不會與另一個演員共享它嗎?如何設置一個Scala actor以獨佔使用一個單獨的線程來運行?
這聽起來像你正在使用斯卡拉(而不是阿卡)演員。在這種情況下,如果你使用receive
或風格的消息處理,那麼每個actor將獲得自己的線程。使用react
消息處理風格共享actor之間的線程池。
當我說receive
「風格」,我的意思是在一個循環,例如:
val timerActor = actor {
while (true) {
receiveWithin(60 * 1000) {
case Stop => self.exit()
case TIMEOUT =>
destination ! Tick
}
}
}
在這種情況下timerActor
不與任何其他演員分享它的線程。將阻止,直到演員收到停止消息或60秒通過。如果經過60秒,則執行TIMEOUT情況。
如果你想了解關於斯卡拉演員的堅韌細節,請查看論文Actors That Unify Threads and Events。
除了基於事件的角色之外,Akka還支持基於線程的角色。
我可以問你爲什麼要這樣嗎? –
@ pablo-fernandez安全地使用'java.lang.Thread.sleep(long millis)',而不凍結任何其他可以共享相同線程的actor。實際的任務是在發送刻度消息之間創建一個定時器actor。 – Ivan
如果您需要更好地控制涉及的線程數,我會使用executor框架 –