The handler supports the following threading models for usual sockets: OnixS::CME::iLink3::ThreadingModel::Dedicated and OnixS::CME::iLink3::ThreadingModel::ThreadPool.
Mode OnixS::CME::iLink3::ThreadingModel::External is intended to the Solarflare TCPDirect technology that is described in Solarflare TCPDirect section.
The model is configured via the OnixS::CME::iLink3::SessionSettings::threadingModel(ThreadingModel::Enum value) method.
In OnixS::CME::iLink3::ThreadingModel::Dedicated mode the Handler creates a dedicated receiving thread and a dedicated sending thread for each OnixS::CME::iLink3::Session instance.
The receiving thread receives and processes incoming SBE messages.
The Handler tries to send an outgoing application-level message in the thread that calls the OnixS::CME::iLink3::Session::send method. If the message cannot be sent immediately, then it is saved to the queue for the subsequent sending by the sending thread. This behavior can be changed using the OnixS::CME::iLink3::Session::messageGrouping method.
The following table shows which thread could fire a particular callback.
Callback | Application thread | Handler's Sending thread | Handler's receiving thread |
OnixS::CME::iLink3::SessionListener::onError | No | Yes | Yes |
OnixS::CME::iLink3::SessionListener::on*(All incoming strongly typed callbacks) | No | No | Yes |
OnixS::CME::iLink3::SessionListener::onOutboundApplicationMsg | Yes | Yes | No |
OnixS::CME::iLink3::SessionListener::onOutboundSessionMsg | Yes | Yes | No |
OnixS::CME::iLink3::SessionListener::onReceivedBytes | No | No | Yes |
OnixS::CME::iLink3::SessionListener::onMessageSending | Yes | Yes | No |
OnixS::CME::iLink3::SessionListener::onStateChange | Yes | Yes | Yes |
OnixS::CME::iLink3::SessionListener::onWarning | Yes | Yes | Yes |
In OnixS::CME::iLink3::ThreadingModel::ThreadPool mode the Handler creates the thread pool and shares it between all sessions.
The maximum number of threads in the pool is configured via the OnixS::CME::iLink3::SessionSettings::threadPoolSize parameter.
In OnixS::CME::iLink3::ThreadingModel::ExternalThread mode the Handler does not create I/O threads. Such mode means that user creates additional threads on their own (or uses the main thread), then performs event dispatching in a loop by calling OnixS::CME::iLink3::TcpDirectStack::dispatchEvents() routine.
Session
instance. This thread performs session storage operations.