Details
-
Enhancement
-
Resolution: Done
-
Major
-
None
-
None
-
False
-
False
-
Undefined
Description
Currently, we have a regular and an internal thread pool. The goal of the internal pool is to handle internal messages exclusively, so that heartbeats for example are not stuck behind regular messages. However, the following points speak in favor of abolishing the internal pool:
- Increased code complexity and configuration (we have to maintain 2 thread pools instead of 1)
- Work stealing in UNICAST3 and NAKACK2 defeats the purpose of the internal pool: a thread of the internal pool might deliver regular messages, and vice versa. In the former case, since regular messages may block, the internal pool can become exhausted
- Due to work stealing, when the regular pool is exhausted, the chances of the internal pool getting exhausted are high, so we might as well just have 1 pool
- Internal messages are dropped when the internal pool is full (changed in
JGRP-2539[1]). This doesn't require an internal pool - SUMMARY: the goal that the internal thread pool processes only internal messages is not achievable with work stealing in place, therefore we might as well abolish it. This leads to less code complexity and configuration.