Я встретил недавно такую схему в книге по UNIX. Для потоков обрабатывающих данные формируется одна очередь, а сообщения для них имеют идентификатор(в книге идентификатор конкретного потока, кому предназначены данные). Можно сделать примерно так: Потоки передают передающему потоку указатель на буфер размером 32 к, где в первых 4 байтах хранится идентификатор(допустим хандел, хотя сам указатель уже может являтся идентификатором), а дальше 512 байт сообщения. Передающий поток передаёт сообщение не с 0 а с 4 байта и принимает данные в этот же буфер начиная с 4 байта. Этот указатель ставится в очередь, которую выгребают потоки обрабатывающие данные. Один поток на передачу, один на прием не нужны, все равно протокол: запрос-ответ. Тут конечно главное избежать лишней обработки данных в потоке обмена.