Size: a a a

2020 February 27

V

Vitaly in Go-go!
Спасибо!
Много чего читал, а вот эту статью почему-то пропустил. Там как раз хорошо нужные мне места описаны.
источник

DP

Daniel Podolsky in Go-go!
это ты, конечно, интересно придумал

но важно-то, что ReadFull не приводит к вызову сискола
источник

V

Vitaly in Go-go!
По сисколам уже смотрел, read/write кушали порядка 10-15% от общего времени.
источник

Т

Тыква Помидор in Go-go!
Эта шутка не стареет
источник

V

Vitaly in Go-go!
Daniel Podolsky
это ты, конечно, интересно придумал

но важно-то, что ReadFull не приводит к вызову сискола
Уточни, плз. Это как?
Он же должен считать буфер, значит делает read. Сисколов не будет только в случае, если read, к примеру, вернул 1000 байт, а мы потом делаем 100 ReadFull по 10 байт - получим сисколл на 100 запросов.
Или там как-то по иному?
источник

DP

Daniel Podolsky in Go-go!
Vitaly
Уточни, плз. Это как?
Он же должен считать буфер, значит делает read. Сисколов не будет только в случае, если read, к примеру, вернул 1000 байт, а мы потом делаем 100 ReadFull по 10 байт - получим сисколл на 100 запросов.
Или там как-то по иному?
там в недрах eventloop, и ReadFull, если данных недостаточно, говорит шедулеру “позовешь меня, когда появится еще”, и ложится в память, пока не позовут.
источник

DP

Daniel Podolsky in Go-go!
в любом случае, read на сокете не вызывается нак прямо
источник

V

Vitaly in Go-go!
А в чём там проблема?
источник

V

Vitaly in Go-go!
Какие альтернативы?
источник

DP

Daniel Podolsky in Go-go!
строить свой протокол поверх udp
источник

V

Vitaly in Go-go!
Daniel Podolsky
строить свой протокол поверх udp
Протокол чужой и древний (smpp).
источник

RS

Roman Sharkov in Go-go!
Vitaly
Подскажите, насколько эффективно использовать io.ReadFull при чтении tcpstream'а или лучше читать в буфер всё, что прилетело из сети и потом парсить? Будут грабли с переключением контекста в системном вызове или всё уже закешировано?

Задача - читать бинарный протокол, данные летят в одной tcp сессии, заголовок 16 байт + variable часть, длина которой лежит в заголовке. Читать много, по 50-100k пакетов в секунду (делаю генератор нагрузки), т.е. по 100-200k io.ReadFull'ов в секунду.

Альтернатива - делать read и самому разбираться "что именно получил" разделяя на нужные куски (если получил неполный пакет, то возвращаемся в цикле и продолжаем делать read).
гадать не стоит, лучше проверять, т.е. бенчмаркить 🙂
источник

V

Vitaly in Go-go!
Roman Sharkov
гадать не стоит, лучше проверять, т.е. бенчмаркить 🙂
Ну я на всякий случай спросил, вдруг у кого-то уже есть верный ответ на этот вопрос ;)

Пока вообще не могу понять, во что упираюсь - получаю порядка 50-60k pps причём на сильно разных по производительности машинах.
Буду профайлером проверять, искать узкое место. И пока оно явно не в read/write.
источник

P

Polkota in Go-go!
Подскажите, какой алгоритм сортировки в го реализован?
источник

RS

Roman Sharkov in Go-go!
Vitaly
Ну я на всякий случай спросил, вдруг у кого-то уже есть верный ответ на этот вопрос ;)

Пока вообще не могу понять, во что упираюсь - получаю порядка 50-60k pps причём на сильно разных по производительности машинах.
Буду профайлером проверять, искать узкое место. И пока оно явно не в read/write.
профайлер не всё раскроет, возможно придётся ещё повозиться с трейсером
источник

а

а кто это in Go-go!
Polkota
Подскажите, какой алгоритм сортировки в го реализован?
вы про пэкэдж sort?
источник

P

Polkota in Go-go!
а кто это
вы про пэкэдж sort?
Да
источник

а

а кто это in Go-go!
Polkota
Да
quickSort
источник

а

а кто это in Go-go!
https://golang.org/src/sort/sort.go#L216
можете посмотреть исходник
источник

P

Polkota in Go-go!
Смотрел исходник. Там реализации всех алгоритмов) но так и не понял какой по дефолту работает
источник