Если вам нужно, чтобы оно было отправлено немедленно , ваш лучший выбор - прикусить пулю и начать делиться объектом подключения. Конечно, заблокируйте его, прежде чем обращаться к нему, и обязательно подумайте о том, что вы будете делать, если буфер отправки уже заполнен (поток соединения должен будет иметь дело с отправкой части сообщения, которая не подходит в первый раз или рабочий поток будет заблокирован, пока клиент не примет часть отправленных вами данных). Это не может быть слишком сложно, если ваши клиенты выполняют только один запрос за раз; в этом случае вы можете просто передать владение клиентским объектом рабочему потоку, когда он начнет обработку, и вернуть его, когда закончите.
Другой вариант - использование потоков в реальном времени. Детали будут различаться в разных операционных системах, но в большинстве случаев, если ваш поток имеет достаточно высокий приоритет, он будет запланирован немедленно, как только он будет готов к работе, и будет вытеснять все другие потоки с более низким приоритетом до тех пор, пока не будет выполнено. В Linux это можно сделать, например, с помощью класса приоритета SCHED_RR . Тем не менее, это может негативно повлиять на производительность во многих случаях; а также сбой системы, если ваш поток попадает в бесконечный цикл. Также обычно требуются права администратора для использования этих классов планирования.
Тем не менее, если планирование занимает достаточно много времени, чтобы время ожидания клиента истекло, у вас могут возникнуть другие проблемы с нагрузкой. Вы также должны указать, насколько быстрым должен быть ответ - нет конца, что вы можете сделать, если хотите ускорить ответ, но наступит момент, когда это уже не имеет значения ( нужен ответ в десятках мс (однозначные мс, сотни микросекунд, однозначные микросекунды?).