我认为对于那些熟悉hft的人来说,这是一个更理论性的问题.我收到FAST的订单并处理它们.我每秒收到大约2-3千个订单.问题是我是否应该尝试同步或异步处理它们.
每次收到下一个订单时,我都需要做以下事情:
要做同步,我有大约200-300μs(能够每秒处理3000个订单).我认为这应该足够了.
只是计划异步任务我花了大约30μs
利弊:
同步:
异步:
同步示例:我们收到更新的MSFT订单,然后更新INTC订单并在不同的线程中处理它们.在这两种情况下,我们都会触发NASDAQ指数重新计算.因此纳斯达克指数的计算应该是同步的.然而,这个特殊问题可以解决以避免同步......这只是可能同步的一个例子.
所以问题是我应该处理同步或异步的订单更新.到目前为止,我处理它们异步,我有每个仪器的专用线程.因为我可以处理针对不同仪器更新的异步两个(MSFT和INTC),但是应该同步处理一个仪器(MSFT)的两个更新.
眼见为实。任何人都可以重现读取撕裂的小数的程序吗?我尝试旋转多个线程,在 1 和 2 之间更改相同的小数。我没有捕获任何与 1 或 2 不同的读取。
我希望看到读取器线程看不到写入器线程的原子更改,因此该值应该与 1 或 2 不同。
void TornDecimalReadTest()
{
decimal sharedDecimal = 1;
int threadCount = 100;
var threads = new List<Thread>();
for (int i = 0; i < threadCount; i++)
{
int threadId = i;
var thread = new Thread(() =>
{
Thread.Sleep(5000);
decimal newValue = threadId % 2 == 0 ? 1 : 2;
bool isWriterThread = threadId % 2 == 0;
Console.WriteLine("Writer : " + isWriterThread +
" - …Run Code Online (Sandbox Code Playgroud)