170 похожих чатов

Всем привет. В asio есть возможность формирования последовательности буферов для

приёма/отправки данных через сокет с гарантией отсутствия как минимум лишних копирований. Кто-нибудь в курсе, как это реализовано? Учитывая, что syscall send ожидает непрерывный кусок памяти

12 ответов

16 просмотров

https://www.boost.org/doc/libs/1_56_0/doc/html/boost_asio/overview/core/buffers.html ЕМНИП, оно внутри должно дергать writev (см man 3 writev )

Alexander Tulikov
sendmsg скорее всего.

не суть, смысл тот же. Там внутри iovec :)

Будьте аккруатнее - контейнер, который вы передаёте на вход может быть скопирован. Так что передавайте на вход спаны или другие легковесные вьюшки, внимательно читайте документацию

Jean-Tulasne Автор вопроса
🐙 Antony Polukhin
Будьте аккруатнее - контейнер, который вы передаёт...

Спасибо! Вообще я знаком более-менее с ней на пользовательском уровне. Просто стало интересно, мол, как же так, есть гарантия отсутствия оверхеда по производительности, а сокет принимает только по сути спан на сырую память. Мне не хватало пинка в сторону writev и sendmsg)) Как-то стыдно даже, что не знал о таких вызовах А так классная библиотека в сочетании со spawn-ом

Jean-Tulasne Автор вопроса
Alexander Tulikov
sendmsg скорее всего.

Вы правы. В случае с UDP действительно скорее всего будет вызов sendmsg

🐙 Antony Polukhin
Будьте аккруатнее - контейнер, который вы передаёт...

Вроде как const buffer sequence это адаптеры только, в каком случае оно копируется? Ещё в beast видел использование этих buffer sequence прям вообще в крайнем варианте, когда оно чуть не из символов собирается. А это ж тоже мне кажется антипаттерн, это дорого даже в случае iovec, краем глаза даже замечал там отдельные buf-stream схлопыватели потому что с ssl это ну прям совсем плохо.

Dmitry Sokolov
Вроде как const buffer sequence это адаптеры тольк...

Вот например https://www.boost.org/doc/libs/1_75_0/doc/html/boost_asio/reference/basic_stream_socket/async_receive/overload1.html "Although the buffers object may be copied as necessary" Если buffers окажется вектором из буферов, то скопируется вектор (да, с динамической аллокацией)

🐙 Antony Polukhin
Вот например https://www.boost.org/doc/libs/1_75_0...

А вектор из буферов подходит под mutable buffer sequence без адаптеров?

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Гайс, вопрос для разносторонее развитых: читаю стрим с юарта, нада выделять с него фреймы с определенной структурой, если ли чо готовое, или долбаться с ринг буффером? нада у...
Vitaly
9
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
длина пакета фиксированная, или меняется?
Okhsunrog
7
Карта сайта