ฉันเป็นมือใหม่ในการ boost::asio
ฉันจำเป็นต้องเขียนโค้ดโมดูลที่อ่านจากไปป์และวางข้อมูลลงในบัฟเฟอร์แบบวงแหวน (ฉันไม่มีปัญหาในการใช้งานส่วนนี้)
อีกส่วนหนึ่งของโมดูลรอให้ผู้บริโภคเปิดการเชื่อมต่อ TCP ใหม่หรือซ็อกเก็ตโดเมน unix และเมื่อทำการเชื่อมต่อโมดูลจะส่งเนื้อหาบัฟเฟอร์วงแหวนเต็มจากนั้นจะส่งข้อมูลใหม่ทันทีที่มันถูกผลักเข้าไปในบัฟเฟอร์วงแหวน . อนุญาตให้มีผู้บริโภคหลายรายและผู้บริโภคหนึ่งรายสามารถเปิดการเชื่อมต่อใหม่ได้ตลอดเวลา
การใช้งานที่ไร้เดียงสาครั้งแรกที่ฉันคิดคือแยก asio::streambuf ออกจากกันสำหรับทุกการเชื่อมต่อและดันบัฟเฟอร์วงแหวนทั้งหมดเข้าไปในนั้นในการเชื่อมต่อและจากนั้นทุกข้อมูลใหม่ แต่ดูเหมือนว่าจะเป็นวิธีที่ไม่เหมาะมากในการทำทั้งสองอย่างในหน่วยความจำ และ cpu รอบเนื่องจากต้องคัดลอกข้อมูลสำหรับการเชื่อมต่อทุกครั้ง อาจหลายครั้งเพราะฉันไม่รู้ว่า boost::asio::send (หรือ linux tcp/ip stack) ทำการคัดลอกข้อมูลหรือไม่
เนื่องจากความคิดของฉันคือการไม่ใช้มัลติเธรดเลย ฉันกำลังคิดที่จะใช้คลาสที่ได้รับ asio::streambuf แบบกำหนดเองบางรูปแบบซึ่งแชร์บัฟเฟอร์จริงกับบัฟเฟอร์วงแหวน แต่เก็บสถานะแยกต่างหากของตัวชี้การอ่านโดยไม่จำเป็น ของล็อคใดๆ
ดูเหมือนว่าของฉันมันเป็นความต้องการที่ค่อนข้างผิดปกติเพราะฉันไม่พบเอกสาร/คำถามที่เกี่ยวข้องซึ่งเกี่ยวข้องกับหัวข้อที่คล้ายกันและเอกสารเสริมดูเหมือนค่อนข้างสั้นและหายากสำหรับฉัน (ดูเช่น: http://www.boost.org/doc/libs/1_57_0/doc/html/boost_asio/reference/basic_streambuf.html)
คงจะดีถ้ามีคนชี้แนะแนวคิดบางอย่างที่ฉันสามารถใช้เป็นจุดเริ่มต้นในการนำการออกแบบของฉันไปใช้ หรือชี้ให้ฉันไปที่การออกแบบทางเลือกอื่น หากเขา/เธอเห็นว่าของฉันไม่ดี นำไปปฏิบัติไม่ได้ และ/หรือปรับปรุงไม่ได้