嗯,我认为这是为那些谁与HFT familar更多的理论问题。 我从FAST接收订单并对其进行处理。 我收到大约每秒2-3上千份订单。 现在的问题是,如果我应该尝试对它们进行处理同步或异步的。
我收到一个订单每当我需要做以下几点:
- 相应仪表的更新手持订单
- 更新指标和指标取决于该顺序
- 更新策略和安排一些行动(如有需要买/卖东西等)
要做到这一点同步我有大约200-300微秒(能够每秒处理3000吨的订单)。 这应该是足够的,我认为。
只是安排异步任务,我花我觉得〜30微秒
优缺点:
同步:
- ++并不需要同步的东西!
- ++之间延迟“接收定单”和“采取行动”是减少,因为不需要安排任务或者传递数据/工作到另一个进程(在HFT很重要!)。
- - 然而,“收到订单”行动可能会推迟,因为我们可以在套接字缓冲区等待等待以前为了处理
异步:
- ++利用现代服务器的强大能力(我的服务器例如具有24个核心)
- ++在某些情况下更快,因为没有同时被处理前一消息等待。
- ++可以处理更多的消息,或者可以做每个消息更“复杂”的东西
- - 需要同步的东西很多东西可以慢降编程
同步的例子:我们收到MSFT为了更新,然后INTC为了更新而在不同的线程处理它们。 在这两种情况下,我们触发纳斯达克指数重新计算。 所以,纳斯达克指数的计算应该是同步的。 然而这方面的问题,可以workarounded避免同步...这只是可能的同步的例子。
所以,问题是应该怎么处理订单更新同步或异步的。 到目前为止,我处理这些异步的,我有专门的仪器每线程。 因为我可以处理异步的两更新的不同仪器(MSFT和INTC),但对于一台仪器(MSFT)两个更新应当被处理同步。