2014-09-01 12 views
5

Próbuję zaimplementować zerową kopię tcp za pomocą doładowania, ale nie jestem w stanie znaleźć niczego na google. Moje pytanie jest możliwe, aby wykonać zerową kopię za pomocą bibliotek doładowania, a jeśli tak, proszę wysłać mi przykład lub jakiś link.TCP Zero kopiowanie za pomocą zwiększenia

+3

'boost :: asio' jest zerową kopią, ponieważ nie skopiuje buforów przez nią przechodzących. Jednak, czy operacje zerowego kopiowania będą używane przez stos tcp - to inny problem .. – Nim

Odpowiedz

6

Można oglądać ten wykład BoostCon przez chłopaków Yandex: The Optimization of a Boost.Asio-based Networking Server

Moje przeczucie mówi, że (faceci Yandex) overengineered to (trochę ...). Powiedziałbym, że podstawowe rozwiązanie będzie polegało na użyciu wstępnie przydzielonych stałych buforów (być może na wątek) i użycia koncepcji MutableBufferSequence z Asio, aby skleić je ze sobą.

To podejście jest znane pod nazwą i zostało krótko opisane w dokumentach Asio. Może istnieć odpowiedni przykład: http://www.boost.org/doc/libs/1_56_0/doc/html/boost_asio/examples/cpp11_examples.html#boost_asio.examples.cpp11_examples.buffers

Jak już @Nim skomentował, Asio domyślnie działa w trybie "zerowej kopii" (ponieważ nigdy nie jest właścicielem bufora, ani nie alokuje w imieniu osoby dzwoniącej). Tak więc powinno być całkiem proste, aby to działało. Oczywiście, czy funkcje jądra/biblioteki libc są zaimplementowane w trybie zerowej kopii, zależy wyłącznie od systemu operacyjnego/platformy.

Powiązane problemy