我最近开始研究 Akka 2.0 框架,并且能够运行一些代码,生成执行简单 Oracle 数据库调用、执行简单计算等的 Actor,但是在生产中什么也没有。
我想知道的是,是否有一般的经验法则或最佳实践来确定为某些类型的任务生成多少个参与者?举例来说,我有一个包含 200 个 jdbc 连接的连接池,我是否创建一个 actor 来代表每个连接?我是否要创建一些并使用循环方法?
Thanks.
请注意,数量(因子)!= 数量(线程)。
您应该为每个实体创建一个参与者,否则它们将跨线程共享可变状态。 Actor 模型的全部内容是它应该隔离可变状态,以便在 Actor 之间只交换不可变的消息。结果是您不再需要任何锁,并且您可以轻松推断程序的线程安全性,因为所有可变状态都在参与者中隔离,并且您可以依赖框架在需要时正确通过内存屏障,例如当将一个参与者从一个线程切换到另一个线程时。
线程数量是一个不同的主题:这取决于核心数量和每个线程的阻塞系数,即等待其他线程或 I/O 子系统所花费的时间百分比。例如,如果你的参与者正在进行 CPU 密集型计算(例如计算 Pi),那么阻塞系数将接近 0%。然而,如果您的 Actor 主要执行 I/O,您可以轻松假设阻塞系数为 90% 或更高。
最后,线程数可以这样计算:
int threads = Runtime.getRuntime().availableProcessors() * 100 / (100 - blockingCoefficient)
其中blockingCoefficient 表示0 到99 之间的整数百分比(包含0 和99)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)