I think the correct answer depends on whether your threads are needed to wait for a response synchronously or not. If they just need to write some message to the socket and not wait for the response of the peer, I think the best answer is to have one thread that is designed to write messages from the queue into which other threads put messages. That way, workflows can simply queue their messages and continue to do something else.
, , , (, ). , , , , . , , .
, - . , - select() , .