причём только при высокой нагрузке (скажем, 10000 запросов в секунду на простенький http-сервер)
Вот для подобной задачки, нужно немножко больше чем "многопоточность". Тут нужно взять все io-операции (включая сокеты), и сделать их неблокирующими, переключая поток на другую задачу пока блокирующий чего-то ждёт.
То есть, полноценный таск-шедулер. И эти 5K rps — можно гонять на одном единственном потоке какого-нибудь Pentium 4.