我有一個演員,我想在地圖中存儲我的可變狀態。在Actor的接收方法的Future中關閉java.util.concurrent.ConcurrentHashMap?
客戶可以發送Get(key:String)
和Put(key:String,value:String)
消息給這位演員。
我正在考慮以下選項。
- 不要在Actor的接收方法中使用futures。在這種情況下,如果我有大量的
gets/puts
,則可能會對延遲和吞吐量產生負面影響,因爲所有操作都將按順序執行。 - 使用
java.util.concurrent.ConcurrentHashMap
然後調用gets並放入Future
。
鑑於java.util.concurrent.ConcurrentHashMap
是線程安全的,粒度更細的供應商水平,我想知道如果它仍然關閉在的ConcurrentHashMap內未來每個put和get帶來的問題。
我知道這是一個非常糟糕的主意,關閉在一個未來內部的可變狀態的演員,但我仍然有興趣知道是否在這種特殊情況下,它是正確的?
0123爲什麼你在這種情況下有未來? 「HashMap」是否活在你的演員之外?如果一切都在你的演員內部,那麼就沒有必要使用期貨。在這種情況下,你不需要使用'ConcurrentHashMap' - 普通的舊'Map'就可以。 –
@CemCatikkas - 根據演員模型的語義,演員郵箱中的消息將按順序處理。這也意味着,除非消息被完全處理,否則下一條消息將不得不等待。例如,想象一下,如果您有100個從Actor中可變映射中讀取的消息。在多核機器上,您應該可以同時讀取這些內容。使用期貨是這樣做的一種方式。 –
訪問此散列映射是內存中操作。在未來包裝它會增加開銷,並可能是一種矯枉過正。除非你有合理的理由在這種情況下使用未來,否則你不應該這樣做。這就是說,你應該真的測量一下,然後確定你的案例的最佳用途。 –