The Feed Engine is the central component of the library that handles the reception, processing, and delivery of market data. There are several implementations of the Feed Engine, each optimized for different usage scenarios (e.g., multithreading, hardware timestamps, ef_vi, etc.).
Multithreading
By default, the handler uses a single dedicated thread for its operation. However, if multiple handlers are needed, the number of threads will equal the number of handlers, which may degrade performance. To address this, OnixS::B3::MarketData::UMDF::FeedEngineThreadPool is provided.
SocketFeedEngine feedEngine;
FeedEngineThreadPoolSettings feedEngineThreadPoolSettings;
feedEngineThreadPoolSettings.threadCount(THREAD_COUNT);
FeedEngineThreadPool pool(feedEngineThreadPoolSettings, &feedEngine);
handlerSettings1.feedEngine = &feedEngine;
handlerSettings2.feedEngine = &feedEngine;
auto handler1 = make_shared<Handler>(handlerSettings1);
auto handler2 = make_shared<Handler>(handlerSettings1);
handler1->start();
handler2->start();
handler1->stop(true);
handler2->stop(true);
- See also
-
Single Thread
To minimize the number of threads, the same thread can be used for both creating the handler instance and processing market data.
SingleThreadedSocketFeedEngine feedEngine;
handlerSettings1.feedEngine = &feedEngine;
handlerSettings2.feedEngine = &feedEngine;
auto handler1 = make_shared<Handler>(handlerSettings1);
auto handler2 = make_shared<Handler>(handlerSettings1);
handler1->start();
handler2->start();
while (true)
{
process(feedEngine);
}
handler1->stop(true);
handler1->stop(true);
- See also
-