我对akka还不太熟悉,也不知道如何实现一个actor,它会等待一个redis列表,一旦一个条目可用,它就会处理它,或者发送给另一个actor来处理?
使用blocking函数brpoplpush更好,还是让参与者每秒轮询redis的调度程序更好?
另外,在一个正常的系统上,我可以同时生成多少个这样的参与者,而不消耗系统提供的所有资源?如何决定一个actor系统应该能够在其运行的系统上处理多少个actor类型?

最佳答案

根据经验,你不应该在receive内部阻塞。每个参与者应该只依赖于CPU,不要等待、睡眠或阻塞I/O。当满足这些条件时,您甚至可以创建数百万个同时工作的参与者。假设每个参与者都有600-650字节的内存占用(请参见:Concurrency, Scalability & Fault-tolerance 2.0 with Akka Actors & STM)。
回到你的主要问题。不幸的是,没有与akka哲学“兼容”的,即完全异步的。您需要的是一个客户端,它将返回某种类型的Future对象,并允许您在结果可用时注册回调。有这样的客户端,例如perl和node.js。
但是我发现独立的项目,你可能会觉得有用。如果您绑定到同步客户端,则最好的方法是:
定期轮询redis而不阻塞,并通过向发送带有redis回复的消息或
在一个演员的身体内阻挡并且official Redis client
另见
fyrie-redis

关于asynchronous - 如何最好地实现阻塞/等待 Actor ?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13666570/

10-15 09:10