У меня однопроцессорное двухпоточное приложение. В потоке 1 вы услышите фид рыночных данных и обновите последнюю котировку на тысячах акций. В потоке 2 будет запускаться таймер с частотой выборки и сделать снимок последних котировок для обработки. Фактически, мне нужно понизить выборку чрезвычайно быстрого рынка данных.Что такое быстрый, эффективный по памяти способ передачи данных между потоками в C#?
Мое первое предположение заключается в использовании BlockingQueue. Для этого мне нужно переместить функции таймера в Thread 1, что я могу сделать, проверяя часы каждый раз, когда приходит обновление котировки и отправляет моментальный снимок кавычек в очередь на частоте дискретизации. Меня беспокоит то, что очередь будет потреблять много памяти, а сбор мусора замедлит работу.
Мое второе предположение состоит в том, чтобы иметь 1-ю копию данных в заблокированный элемент на частоте дискретизации, к которой может обратиться нить 2. Меня беспокоит, что замки будут медленными.
My thirt Угадайте, чтобы сделать цитаты примитивными нестабильными. Поскольку один поток только пишет и только один поток только читает, возможно, это подходит?
Есть ли способ передачи данных между потоками для этого чувствительного к задержкам приложения? Это не ультра-высокочастотное приложение. Я могу терпеть латентности порядка десятков мс.
Вам потребовалась блокировка чтения и времени (чтение/запись)? :) –
@AmarPalsapure Спасибо, опечатка исправлена! –
Thx для вашего ответа. Я попытаюсь запустить блокировки. Что вы думаете об использовании изменчивости? –