Saya seorang pemula dalam boost::asio.
Saya perlu membuat kode modul yang membaca dari pipa dan memasukkan data ke dalam buffer cincin (Saya tidak punya masalah dalam cara mengimplementasikan bagian ini).
Bagian lain dari modul menunggu konsumen untuk membuka koneksi TCP baru atau soket domain unix dan ketika koneksi dibuat, modul tersebut mengirimkan konten buffer ring penuh dan kemudian akan mengirimkan data baru segera setelah dimasukkan ke dalam buffer ring. . Banyak konsumen diperbolehkan dan satu konsumen dapat membuka koneksi baru kapan saja.
Implementasi naif pertama yang saya pikirkan adalah menyimpan asio::streambuf terpisah untuk setiap koneksi dan mendorong seluruh buffer cincin ke dalamnya pada koneksi dan kemudian setiap data baru, tetapi tampaknya ini merupakan metode yang sangat kurang optimal untuk melakukan keduanya di memori dan siklus cpu karena data harus disalin untuk setiap koneksi, mungkin beberapa kali karena saya tidak tahu apakah boost::asio::send (atau tumpukan linux tcp/ip) menyalin data.
Karena ide saya adalah tidak menggunakan multi threading sama sekali, saya berpikir untuk menggunakan beberapa bentuk kelas turunan asio::streambuf khusus yang berbagi buffer aktual dengan buffer cincin, tetapi mempertahankan status terpisah dari penunjuk baca tanpa perlu kunci apa pun.
Tampaknya bagi saya ini adalah kebutuhan yang sangat tidak biasa, karena saya tidak dapat menemukan dokumentasi/pertanyaan terkait yang berhubungan dengan subjek serupa dan dokumentasi peningkatan tampaknya cukup singkat dan langka bagi saya (lihat misalnya: http://www.boost.org/doc/libs/1_57_0/doc/html/boost_asio/reference/basic_streambuf.html).
Akan lebih baik jika seseorang dapat menunjukkan kepada saya beberapa ide yang dapat saya ambil sebagai titik awal untuk mengimplementasikan desain saya atau mengarahkan saya ke desain alternatif jika dia menganggap ide saya buruk, tidak dapat diterapkan dan/atau dapat ditingkatkan.