我使用 Java 开发金融应用程序,正确地实现并发性是一件很痛苦的事情。 Erlang 和参与者模型应该非常适合大规模并发应用程序,但我不知道如何在 Java 中做到这一点。我知道有 Jetlang、FunctionalJava、kilim 等库,但它们通常不会超越简单的示例。
假设我需要处理三个或四个不同的事件,例如从市场数据源、订单/交易源计算一些数字以及“输出”这些数据的一些衍生产品。大多数时候,这些事件或数据流需要按顺序处理(至少按某些键的顺序......例如,必须按顺序处理特定交易品种的所有订单,但与尊重不相关的符号)
我用改变状态的方法创建了一个普通的 Java 对象。我没有让这些方法直接改变状态,而是将它们的参数(通过将它们转换为命令对象)放在一个 fifo 队列(erlang 的邮箱)中,以及一个处理该队列的 react() 方法。这样,所有更新都必须通过一个队列,并且 react() 方法一次只能访问一个更新。理论上,这应该使我无需锁定或同步此方法。
但是,这个队列基本上是一个生产者/消费者队列,也就是说它是一个阻塞队列。阻塞对可伸缩性非常不利。此外,拥有单个队列意味着我所有的更新命令对象(不同类型)都从队列中出来,带有一些过于通用的父类(super class)型(如 Object),我必须将它们转换回正确的类型并让 react() 处理它们.
一旦这个 actorized 对象产生了一个输出,供另一个这样的对象使用,我就会经历同样的过程。换句话说,我已经将编程模型从面向对象(使用返回结果的方法)更改为某种持续传递噩梦,其中我的所有方法都变成异步的。
有什么想法可以解决这个问题吗?
最佳答案
最近akka为 Scala 提供了一个基于 Erlang 的 actor 框架。
关于java - 如何在 java 中做 Actor (erlang)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/792638/