我正在考虑在系统中使用Actors来包装一些存储(可能是数据库,可能是内存中的集合)。我想这样做的原因是因为我不希望调用商店的代码阻止调用它的代码,我打算通过大量的消息来推送。
actor的入站消息队列可以处理数十万条消息吗?直接调用对象上的方法的代码与将actor放在中间的队列之间的性能有何不同?
干杯
乔
答案 0 :(得分:4)
actor邮箱是一个以可变双向链表实现的出列。大小仅受可用内存的约束。如果您发送的消息数量太快而且演员可以处理它们,则会收到OutOfMemoryError。
向actor发送消息正在调用方法。将消息排队,通知actor,为actor分配一个线程等都会产生开销。因此,与普通的同步方法调用相比,发送该消息会产生大量的开销,因此会产生相当大的开销。当然,如果该方法位于那里并且阻塞了一段时间,它将最终变慢,至少在墙上时间。