我假设这是一个更理论性的问题,适用于熟悉高频交易的人。我从FAST接收订单并处理它们。我每秒接收大约2-3千个订单。问题是我应该尝试同步或异步处理它们。
每次我接收到下一个订单时,我需要执行以下操作:
更新相应工具的订单簿 更新依赖于该订单的指数和指标 更新策略,如果需要则安排一些操作(购买/出售等)
为了同步执行这些操作,我有大约200-300微秒的时间(以能够处理3000个订单每秒)。我认为这应该足够了。
仅为调度异步任务,我认为花费了大约30微秒。
优缺点:
同步:
不需要同步事物! “订单已收到”和“操作已执行”的延迟较小,因为不需要安排任务或将数据/工作传递给另一个进程(在高频交易中非常重要)。 但是,“订单已收到”操作可能会延迟,因为我们可以在套接字缓冲区中等待前一个订单进行处理。
异步:
可以利用现代服务器的强大功能(例如,我的服务器有24个核心) 在某些情况下更快,因为不必等待前一个消息被处理。 可以处理更多的消息或每个消息可以执行更多“复杂”的操作 需要同步很多事物,这可能会减慢程序。
同步的示例:我们接收到MSFT订单更新,然后是INTC订单更新,并在不同的线程中处理它们。在两种情况下,我们都会触发NASDAQ指数重新计算。因此,NASDAQ指数计算应该是同步的。但是,可以通过解决此特定问题来避免同步……这只是可能同步的一个示例。
因此,问题是我应该同步或异步处理订单更新。到目前为止,我异步处理它们,并且每个工具都有专用的线程。因为我可以异步处理两个不同工具(MSFT和INTC)的更新,但是同一工具(MSFT)的两个更新应该同步处理。
每次我接收到下一个订单时,我需要执行以下操作:
更新相应工具的订单簿 更新依赖于该订单的指数和指标 更新策略,如果需要则安排一些操作(购买/出售等)
为了同步执行这些操作,我有大约200-300微秒的时间(以能够处理3000个订单每秒)。我认为这应该足够了。
仅为调度异步任务,我认为花费了大约30微秒。
优缺点:
同步:
不需要同步事物! “订单已收到”和“操作已执行”的延迟较小,因为不需要安排任务或将数据/工作传递给另一个进程(在高频交易中非常重要)。 但是,“订单已收到”操作可能会延迟,因为我们可以在套接字缓冲区中等待前一个订单进行处理。
异步:
可以利用现代服务器的强大功能(例如,我的服务器有24个核心) 在某些情况下更快,因为不必等待前一个消息被处理。 可以处理更多的消息或每个消息可以执行更多“复杂”的操作 需要同步很多事物,这可能会减慢程序。
同步的示例:我们接收到MSFT订单更新,然后是INTC订单更新,并在不同的线程中处理它们。在两种情况下,我们都会触发NASDAQ指数重新计算。因此,NASDAQ指数计算应该是同步的。但是,可以通过解决此特定问题来避免同步……这只是可能同步的一个示例。
因此,问题是我应该同步或异步处理订单更新。到目前为止,我异步处理它们,并且每个工具都有专用的线程。因为我可以异步处理两个不同工具(MSFT和INTC)的更新,但是同一工具(MSFT)的两个更新应该同步处理。