【问题标题】:In what way is LMAX's distruptor usable for a stock market?LMAX 破坏者以何种方式可用于股票市场?
【发布时间】:2013-11-20 21:16:00
【问题描述】:

我对破坏者模式进行了一些研究,但有一件事我无法理解。

有生产者,它们为环形缓冲区提供入口。 有环形缓冲区,基本上是一个固定但无限的数组。 有消费者(基本上是独立的线程),处理来自环形缓冲区的条目。

我试图说明如何在股票市场的真实案例场景中使用破坏者模式。

通常您会拥有包含所有订单的订单簿。我怎么看,生产者会收到经纪人的新订单。生产者将订单放入环形缓冲区。在订单被放入环形缓冲区后,消费者获取订单并与订单簿进行交叉检查。

现在这是我在理解优势时遇到一些麻烦的部分。如果有多个消费者,这就是你想要的可扩展系统,怎么会有多个消费者处理订单?

当消费者访问订单簿时,必须锁定订单簿以确保完整性。 我正在寻找的是这个问题的答案以及一个订单匹配引擎如何可能从这种模式中受益的粗略想法。

LMAX 有自己的订单匹配引擎,所以我肯定忽略了一些东西。

谢谢

【问题讨论】:

    标签: java stocks lmax


    【解决方案1】:

    他们有一个消费者自己处理订单。其余的消费者对此订单处理器的输出采取行动 - 例如返回响应、写入日志、写入数据库等。实际的订单处理发生在单个线程上,这是访问订单簿的唯一线程,因此不需要锁定它。

    他们声称能够在这个单一线程上处理多达 600 万个订单/秒。

    【讨论】:

    • 没错。 LMAX 架构最重要的一点(正如他们公开描述的那样!)是有一个线程进行实际的顺序匹配,它能够在没有锁定的情况下与输入和输出线程进行通信。这意味着虽然工作是由单个线程完成的,但它能够以极快的速度运行。这种方法不会随着额外的内核扩展,但这并不重要,因为它在单个内核上很容易就足够快。
    • 感谢您的回答 Radai 和 Tom Anderson。但是问题来了:
    • 感谢您的回答 Radai 和 Tom Anderson。根据您的回答,我开始认为 Disruptor 应该被视为以非并发但并行的方式结构化处理操作的一种手段。 Disruptor 不是一种快速订单匹配模式。我说的对吗?
    • @user3014924 是正确的,它不是快速订单匹配的模式,它是结构性的。它提供了一种将传入订单的速度与其处理分离的方法——就像传入订单和处理之间的缓冲区一样。它基本上是一个简单的“队列”。但是,由于 CPU 缓存一致性影响,由多个线程访问的典型 Java 队列集合最终会产生大量开销。 Disruptor,通过限制单个生产者,实现标准集合不具备的效率。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-28
    • 1970-01-01
    • 2013-01-04
    • 1970-01-01
    • 2015-11-08
    • 1970-01-01
    相关资源
    最近更新 更多