У меня есть несколько потоков, которым необходимо использовать данные из потока TCP. Я хочу использовать циклический буфер/очередь в общей памяти для чтения из сокета TCP. Прием TCP будет записываться непосредственно в циклическую очередь. Потребители будут читать из очереди.
Эта конструкция должна обеспечивать нулевое копирование -и нулевую блокировку -. Однако здесь есть 2 разные проблемы.
Возможно ли/эффективно читать только 1 логическое сообщение из сокета TCP? Если нет, и я прочитал более 1 сообщения, мне придется скопировать остатки из этого в это ->следующее.
Реально ли реализовать блокировку -без очереди? Я знаю, что есть атомарные операции, но они тоже могут быть дорогостоящими. потому что весь кеш процессора должен быть аннулирован. Это повлияет на все операции на всех моих 24 ядрах.
Я немного заржавел в TCP низкого уровня -и не совсем понимаю, как определить, когда сообщение завершено. Я ищу \0 или это зависит от реализации?
ты