交易订单更新和计算

本文关键字:计算 更新 单更新 交易 | 更新日期: 2023-09-27 17:53:44

我正在工作中构建一个2级OrderBook。

我使用并发字典分别存储出价和要价的数据。

我正在使用UDP侦听器读取数据包数据,在我处理数据包后,我将更新到bid/ask字典传递给Task。

这工作得很好,更新发生得很快,但看起来很笨拙。

当我需要对Orderbook进行任何计算时,我必须锁定它进行计算,考虑到它是一个并发字典,这似乎是一件坏事。我觉得我正在减慢一切违背目的的事情。

你建议我如何解决锁定问题并减慢更新速度以对数据进行计算?

对不起,我不能发布代码,因为我目前不在,但我只是不能停止思考如何解决这个问题。

交易订单更新和计算

该设计已达到仅使用一个数据筒仓的限制。因此,我建议更改设计以适应两个筒仓和一个数据管理器。

首要目标应该是及时而安全地完成所需的计算操作,其次是集中于任何数据输入,这些数据输入应该是自由的,不能被阻塞。


在这个设计中有三个线程,一个管理器和两个数据筒仓。

数据输入

UDP listener的线程将存储所有传入的数据,并将其排队到ConcurrentQueue类中。该存储筒仓将以FIFO方式处理数据的并发需求。

数据经理第二个线程运行一个数据管理器单例,它将smurf (TryDequeue)从数据输入ConcurrentQueue到最终筒仓的数据。由于传入数据位于Queue中,因此可以限制通过该虚拟网桥的记录总数,以达到可以测量/监视的标准性能。

Final Data Silo (Orderbook)

执行求和操作的最后一个线程是数据最终驻留的地方。数据本身可以是一个标准字典,它将被数据管理器或求和进程锁定。然后可以更改访问的优先级,使求和过程优于数据管理器,反之亦然;这将取决于行动的最终需要。

通过该设计,数据输入是畅通的,并且求和操作以一种可测量的方式优先于数据输入。