估计Scala中参与者的可能#

估计Scala中参与者的可能#,scala,multiprocessing,actor,Scala,Multiprocessing,Actor,如何估计Scala程序可以处理的参与者数量 在上下文中,我正在考虑什么本质上是一个神经网络,它将以高速率创建和遗忘细胞。我正在考虑让每一个细胞都成为演员,但会有数以百万计的细胞。我试图决定这个设计是否值得追求,但无法估计演员数量的限制。我的意图是它应该完全在一个系统上运行,所以分布式限制不适用 就这一点而言,如果有更好的选择,我还没有确定Scala,但单元格确实有状态,例如,它们与其他单元格的连接、连接的权重等。尽管这可以做到“每个单元格都是最终的。更改意味着用具有相同id的新单元格替换当前单元

如何估计Scala程序可以处理的参与者数量

在上下文中,我正在考虑什么本质上是一个神经网络,它将以高速率创建和遗忘细胞。我正在考虑让每一个细胞都成为演员,但会有数以百万计的细胞。我试图决定这个设计是否值得追求,但无法估计演员数量的限制。我的意图是它应该完全在一个系统上运行,所以分布式限制不适用

就这一点而言,如果有更好的选择,我还没有确定Scala,但单元格确实有状态,例如,它们与其他单元格的连接、连接的权重等。尽管这可以做到“每个单元格都是最终的。更改意味着用具有相同id的新单元格替换当前单元格。”

旁白:我不认识斯卡拉。我正在考虑用它来做这个项目。我还考虑了很多其他选择,包括Java、Object Pascal和Ada。但与线程池相比,参与者似乎更能反映我所追求的目标(而且Java无法处理足够多的线程来实现线程/单元设计)


P.S.S.:在任何时候,大多数的演员都是静止的,但是在整个集合中都需要一种循环的方式。如果没有一个内置到语言中,那么可以通过每个单元中的第一个/下一个链接来管理。(这两个链接都是需要的,以允许中间的细胞被释放)。

对于神经网络模拟,真正的问题是计算工作中有多少会花在通信上,以及计算一个细胞内的东西会花多少?如果大部分工作是在通信上,那么参与者可能是正确性的好选择,但对于效率来说根本不是一个好选择(即使使用Akka,它的性能相当好;不过可能会达到这个目的)。数百万个神经元听起来很慢——效率可能是一个重要问题。如果神经元有一些相当繁重的计算要自己完成,那么通信开销就没什么大不了的


如果通信是瓶颈,并且你有很多微小的消息,那么你应该设计一个定制的数据结构来容纳网络,以及定制的线程处理,它将利用你所有的处理器,并最小化你必须执行的锁定量。例如,如果你有空间,每个神经元可以容纳一个数组当计算输出时,它会直接读取数组而不加锁,输入神经元会在不加锁的情况下更新这些值。然后你可以把所有的神经元转储到一个大的池中,让一个主节点把它们分块分发,我不知道,也许吧每次一万个,每个线程都有自己的线程。Scala可以很好地完成这类工作,但需要自己做很多低级工作,或者等待很长时间才能完成模拟。

如果您还没有这样做,我建议您在Akka中使用Scala/java中的actors,而不是使用Scala actors。它还支持视频不仅仅是演员。如果你有兴趣向演员或系统的所有子演员广播,有几种方法可以使用演员的所有子演员的列表。例如,在演员引用中使用context.children或使用ActorSelection:嗯,神经元并不完全是正确的概念,这就是为什么我只说cell,而不是each单元必须包含对几种不同类型连接的引用。OTOH,该单元目前计划不进行太多计算。主要通过调整权重来响应消息。当然,在完成时保存状态,并在开始时加载。线程池是明显的替代方案,但当我看了这项工作后volve,我开始寻找一个更简单的解决方案。@CharlesHixson-Actors是使用线程池的一个更简单的方法。但我真的认为标准重量级消息太重了。或者--找出你的目标是每秒消息做一些有用的事情,然后查看Akka actor基准。@joseph这不是太多的“消息/秒”,至少不是来自每个细胞。但是细胞会向其他细胞发送消息,每条消息会在网络中产生涟漪,直到它消失,或者导致一个新的细胞被构建。涟漪不仅仅是单向的,它会传播。因此,如果消息很重,我需要一种不同的方法。Akka的速度可能还可以(基准看起来令人印象深刻),但我也担心RAM消耗。参与者的内存开销约为400字节,而且您的通信模式似乎非常适合Akka。不过,您可能希望将您的细胞作为一组家长的子女分散开来,这取决于细胞创建和死亡的频率。如果您选择,请ping邮件列表沿着这条路走!我建议用你知道的更好的技术——这将允许快速原型。也可以考虑<代码> Erlang < /Cord>——它可以在任何时候(<代码>斯卡拉<代码> +>代码> AkkA将更加困难),原型很快(实际速度取决于技能)。,消息吞吐量是一样的。缺点是计算(如果你有一些霍奇金/赫胥黎方程或任何你的单元格)和缓慢的IO(保存/恢复状态-实际上有解决办法)。对于一个长期项目,我将再次选择一个工具,它将给出一个代码,在一年或两年内可读-例如,良好的旧
Java