У меня однопроцессное, двухпотоковое приложение.Поток 1 будет прослушивать поток рыночных данных и обновлять самые последние котировки по тысячам акций.Поток 2 запустит таймер с частотой выборки и сделает снимок самых последних цитат для обработки.По сути, мне нужно уменьшить скорость чрезвычайно быстрой подачи рыночных данных.
Мое первое предположение о решении - использовать BlockingQueue.Для этого мне нужно переместить функцию таймера в поток 1, что я могу сделать, проверяя часы каждый раз, когда приходит обновление цитаты, и отправляя снимок цитат в очередь с частотой выборки.Меня беспокоит то, что очередь будет занимать много памяти, а сборка мусора замедлит работу.
Мое второе предположение - заставить поток 1 скопировать данные в заблокированный элемент с частотой выборки, который поток 2может получить доступ.Мое беспокойство здесь заключается в том, что блокировки будут медленными.
Думаю, это сделает примитивы цитат нестабильными.Поскольку один поток только пишет, а один поток только читает, может быть, это уместно?
Существует ли лучший способ обмена данными между потоками для этого приложения, чувствительного к задержке?Это не сверхвысокочастотное приложение.Я могу терпеть задержки порядка десятков мс.