2009-09-01 89 views
3

我正在考慮在系統中使用Actor來包裝某些存儲(可能是數據庫,可能是內存中的集合)。我想這樣做的原因是因爲我不希望調用存儲來阻止調用它的代碼,並且我打算推送大量消息。演員隊列的最大大小?

演員的入站消息隊列可以處理數十萬條消息嗎?代碼直接調用對象上的方法並在中間放置隊列中的actor的性能會有什麼不同?

乾杯

回答

4

演員的郵箱是一個可變的雙向鏈表實現出隊。大小隻受可用內存的限制。如果您發送的消息太多比參與者處理它們的速度快,則會收到OutOfMemoryError。

發送消息給演員正在調用方法。與排隊消息相關的開銷,通知參與者,爲參與者分配線程等。因此,與消息發送相關的事情有很多,因此與普通的舊同步方法調用相比,存在相當多的開銷。當然,如果方法坐在那裏並阻塞一段時間,它最終會變得更慢,至少在牆上時間。