use*_*592 15 scala immutability akka
在为金融服务行业构建大型多线程应用程序时,我尽可能地使用不可变类和工作流模型.我对结果非常满意.它使用了相当数量的堆空间(在Java btw中),但JVM的GC在短期不可变类中运行良好.
我只是想知道今后使用这种模式是否有任何缺点?在调试团队配对代码时,我经常发现自己以这种或那种方式推荐这种模式.我猜一旦有人拿锤子,一切看起来像钉子.所以问题是:这种设计模式(范式?)什么时候会运作不佳?
我的预感是当内存使用是一个大问题,或者当项目限制需要一些低级C的东西时,等等.
许多科学模拟代码实际上是内存密集型的.例如,对于蜂窝自动机模型,快速存储器访问比CPU功率更重要.在这种情况下,访问和修改可变数组总是更快(至少在我的所有试验中).
一切都取决于您的项目设计.
如果你有一些资源和许多演员使用它,那么常见的模式是设计访问者角色.然后,当其他一些演员需要询问一些资源时,他会询问它是访问者演员.然后通过消息通道复制答案.
现在想象 - 你有非常重的资源(例如map[String, BigObject])和其他演员经常询问一些BigObject然后你浪费你的带宽.
更好的想法是以只读模式将资源共享给所有参与者,并使一个参与者执行写入.
其他示例是数据库连接器,它使用大量blob数据连接到数据库.当数据库连接器是线程安全的(通常情况下)时,最好将连接器对象引用共享给所有actor,然后设计一些提供访问权限的actor.
所有你需要记住每个演员之间的沟通是通过复制消息完成的.