The ICM process uses threads to parallelize the load.
The following illustration shows a detailed overview of the ICM.
Besides the pool of worker threads, which process incoming requests, the following ICM components are also implemented as threads:
Thread Control
This thread accepts the incoming TCP/IP requests and creates (or wakes) a worker thread from the thread pool to process the request. From this point on, thread control initializes the connection info data.
Worker Threads
These threads handle connection requests and responses. A worker thread contains an I/O handler for the network input and output, diverse plug-ins for the various supported protocols (HTTP, SMTP,…), which are required to be able to decide when the sent packet is finished (depends on the protocol).
For more information, see: Processing HTTP Requests.
Watchdog
Usually, a worker thread waits for the response, regardless of whether the worker thread is a server or a client. If a timeout occurs, the watchdog takes on the task of waiting for the response. This makes the worker thread available for other requests. When the watchdog receives the response, it informs the thread control components, which then call a worker thread.
Signal Handler
This thread processes signals sent from the operating system or from another process (for example, the dispatcher).
Connection Info
This table contains information about the state of the connection, the memory pipes, and the plug-in data for every existing network connection.
Memory Pipes
These memory-based communication objects are used to transfer data between the ICM and work processes (AS ABAP), or between the ICM and Java server processes (AS Java). There are four pipes for every connection: One data pipe per request and response and one out-of-band (OOP) pipe. The OOB pipe is used for control data.
For more information, see: Memory Pipes and MPI Buffers
Internet Server Cache
The ICM contains another cache to enable a quick response to repeated requests. This cache is not shown in the graphic. ICM Server Cache.