我最近已经开始寻找到阿卡2.0框架,并能得到一些代码运行,产卵行为者进行简单的Oracle数据库调用,但在生产中进行简单的计算和诸如此类的东西,什么都没有。
我想知道,是否有拇指或最佳实践来确定有多少演员产卵某些类型的任务的一般规则? 比方说,我有200个JDBC连接的连接池,难道我创建一个演员来表示每个连接? 难道我为它们创建了一把,并使用循环的方法吗?
谢谢。
我最近已经开始寻找到阿卡2.0框架,并能得到一些代码运行,产卵行为者进行简单的Oracle数据库调用,但在生产中进行简单的计算和诸如此类的东西,什么都没有。
我想知道,是否有拇指或最佳实践来确定有多少演员产卵某些类型的任务的一般规则? 比方说,我有200个JDBC连接的连接池,难道我创建一个演员来表示每个连接? 难道我为它们创建了一把,并使用循环的方法吗?
谢谢。
需要注意的是numberOf(演员)!= numberOf(线程)。
您应该创建,否则将在线程之间共享可变状态的每个实体的演员。 关于角色模型整个事情是这样的,只有永恒不变的消息得到了参与者之间的交换应隔离可变状态。 其结果是,你不需要任何锁了,你可以很容易地推理程序的线程安全的,因为所有可变的状态是演员分离,你可以依靠的框架,通过正确的内存屏障在需要时,例如当切换从一个线程到另一个演员。
线程的数目是不同的对象:这取决于核心的数量和用于每个线程阻塞系数,即时间的百分比它花费等待其他线程或I / O子系统。 例如,如果你的行动者正在做CPU密集型计算(例如计算PI),那么阻塞系数将接近0%。 然而,如果你的角色是做主要是I / O,你可以很容易地承担90%以上的阻塞系数。
最后,线程数可以计算如下:
int threads = Runtime.getRuntime().availableProcessors() * 100 / (100 - blockingCoefficient)
其中blockingCoefficient代表0和99包含性之间的整数百分比。
只要你喜欢,但是,你只限于大约2十亿每父,也不要忘了去阻止他们,他们都完成时,您可以创建许多演员。 此外,除非它们实际上是顶级演员不创建角色为最高级别。 (即创建内部使用context.actorOf代替system.actorOf演员演员)