交易订单更新和计算
本文关键字:计算 更新 单更新 交易 | 更新日期: 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
)
执行求和操作的最后一个线程是数据最终驻留的地方。数据本身可以是一个标准字典,它将被数据管理器或求和进程锁定。然后可以更改访问的优先级,使求和过程优于数据管理器,反之亦然;这将取决于行动的最终需要。通过该设计,数据输入是畅通的,并且求和操作以一种可测量的方式优先于数据输入。