Как реализовать нулевое -копирование tcp с использованием блокировки -свободного кольцевого буфера в C++

У меня есть несколько потоков, которым необходимо использовать данные из потока TCP. Я хочу использовать циклический буфер/очередь в общей памяти для чтения из сокета TCP. Прием TCP будет записываться непосредственно в циклическую очередь. Потребители будут читать из очереди.

Эта конструкция должна обеспечивать нулевое копирование -и нулевую блокировку -. Однако здесь есть 2 разные проблемы.

  1. Возможно ли/эффективно читать только 1 логическое сообщение из сокета TCP? Если нет, и я прочитал более 1 сообщения, мне придется скопировать остатки из этого в это ->следующее.

  2. Реально ли реализовать блокировку -без очереди? Я знаю, что есть атомарные операции, но они тоже могут быть дорогостоящими. потому что весь кеш процессора должен быть аннулирован. Это повлияет на все операции на всех моих 24 ядрах.

Я немного заржавел в TCP низкого уровня -и не совсем понимаю, как определить, когда сообщение завершено. Я ищу \0 или это зависит от реализации?

ты

7
задан jaybny 2 July 2012 в 14:16
поделиться