Nikolay
https://banu.com/blog/2/how-to-use-epoll-a-complete-example-in-c/
Nikolay
держите по iocp и epool - читайте
Daniel
http://yusufonlinux.blogspot.ru/2010/11/data-link-access-and-zero-copy.html
Nikolay
http://yusufonlinux.blogspot.ru/2010/11/data-link-access-and-zero-copy.html
ну сырые сокеты то зачем? про zero-copy тоже понравилось. какое отношение к AIO это имеет и что я в итоге не понимаю?
Daniel
насколько я понимаю - синхронный IO этим механизмом не снабжен. но могу и ошибаться.
Daniel
zero-copy повышает производительность сетевых серверов в разы, насколько я помню - memcpy очень дорогой, очень
Nikolay
синхронный от асинхронного отличается только тем кто опрашивает набор сокетов о наличии в них данных, об ошибках и тд и тп - либо пользовательский код либо ядро. коротко в общих чертах это именно так, а в остальном работа с сокетом ничем не отличается от синхронного варианта или варианта через select
Daniel
а не понимаете вы того, что в современном мире получение данных из сокета может - и должно - обходиться без этого самого memcpy
Roman
ядро выделяет буфер, и читает данные в него
на самом деле не так ) пользователь предоставляет ядру буфер, в который ядро делает memcpy :)
Daniel
это правда
Daniel
это рома прав
Daniel
только не memcpy оно делает, а mmap
Nikolay
чем мой ответ отличается от этого?
Nikolay
epoll/kqueue/iocp? не вкурсе только о kqueue. кроме обвязки (в сравнении с простой реализацией) все тоже самое чтение, что я описал выше - в recv отправляется указатель на буфер и длина и ядро в пользовательский буфер пишет данные из буфера сокета и возвращает кол-во записанных
Nikolay
на самом деле не так ) пользователь предоставляет ядру буфер, в который ядро делает memcpy :)
Roman
Да хрен с ними с сисколами и ядром. Главное, как память-то не выделять на каждое заходящее UDP, но читать его и долго потом думоть?
элементарно. аллоцируем пачку(допустим, 1024 шт) буферов по 2048 байт и пользуемся этим пулом.
Roman
http://yusufonlinux.blogspot.ru/2010/11/data-link-access-and-zero-copy.html
я линк не открывал, но скорее всего там говорят про AF_PACKET и packet_mmap
Nikolay
угу там про AF_PACKET
Nikolay
про пачку буфферов я вариант предложил выше, через Sync.pool например
Roman
только не memcpy оно делает, а mmap
для большинства сисколлов всё-таки memcpy.
Daniel
но не для сети
Nikolay
но тут эксперты говорят я не понимаю ничего в сокетах
Daniel
сетевой буфер можно без единой аллокации, кроме первичной, протащить от входа до выхода
Daniel
по дороге прямо в нем поменяв соответсвующие поля
Roman
но не для сети
увы, для сети тоже. я вчера как раз развлекался с recvmmsg/sendmmsg
Daniel
ну, хорошо
Daniel
я вот вчера с ними не развлекался, поэтому спорить не буду
Daniel
когда я развлекался с ними в последний раз - лишних аллокаций в java nio не было
Roman
вообщем, там в топе copy_user_enhanced_fast_string
Roman
0,46 │ mov %edx,%ecx 97,27 │ rep movsb %ds:(%rsi),%es:(%rdi) 0,08 │ xor %eax,%eax
Roman
и вот как-то так она выглядит в профайлере
Nikolay
вообщем, там в топе copy_user_enhanced_fast_string
в мире Джава все не так, там нет никаких лишних аллокаций
Nikolay
:)
Nikolay
да у меня тоже это был сарказм)
Roman
вообщем-то у проблем у Михаила Монашева немного
Daniel
да рази ж дело в михаиле?..
Roman
1) в go нет sendmmsg/recvmmsg
Daniel
зёпа
Roman
2) в go нет какого-либо api чтобы переиспользовать буфер
Roman
вообщем-то, всё это решаемо
Roman
написанием своих велосипедов )
Nikolay
он за какого вендора был? надо понять кто победил все же
админ, прости
Roman
какой буфер имеется ввиду?
да, ступил. вообщем, нужен пул буферов, куда пакетики сваливаться будут с api вроде get()/release()
Roman
да, ступил. вообщем, нужен пул буферов, куда пакетики сваливаться будут с api вроде get()/release()
вообщем, вместо честной аллокации переиспользовать уже ранее созданное.
Nikolay
Мерль
[last news] Top Most Imported Golang Packages
Встреча завтра в Новосибирске стартует в 11? И с какой стороны там вход?
Anton
Всем добрый день! Скажите, пожалуйста, имеет ли смысл читать какие-то книги по Go, или их нет нормальных? Если есть, то подскажите, какие вы советуете прочесть? Спасибо!
серёжа
Дочитываю Кернигана, брат жив
Anonymous
Книги по Go не читал, брат тоже жив.
Anton
Благодарю)
Мерль
Мерль
Alexander
нетворк программинг – это не та книжка где куча косяков в коде?
Alexander
или она хорошая?
Roman
нетворк программинг – это не та книжка где куча косяков в коде?
Скорее всего, нормальная книжка: https://www.gitbook.com/book/jannewmarch/network-programming-with-go-golang-/details
Alexander
наверное перепутал с чем-то
Alexander
но 2012!
Roman
Да, но Updated 14 days ago
Alexander
хм, а где там хистори посмотреть :)
Alexander
https://www.gitbook.com/book/jannewmarch/network-programming-with-go-golang-/discussions/3
Roman
Утро, книжек не читал, брат девопс
Kirill
https://github.com/pzduniak/sleepsort
Dmitry
Читал спецификацию Go, 50 оттенков Go, и немного Effective Go. Чего и вам советую, особенно первое.
Stanislav
Утро, книжек не читал, брат девопс
пожалуй, лучший технический комментарий про брата
Roman
Так я на полном серьезе и он тоже пишет на го
One
Alexander
Network programming где-то сильно ругали за то, что небезопасные вещи пишет. Деталей не помню, но осадочек, как говорится, остался
Bald
А есть простой template engine или встроенный норм?
Robert
Pongo2 возьми
Mikhail
для простых вещей вполне хватает, имхо.
Mikhail
а так да, понго или мусташ есть