Kirill
ну ты просто перечислил чем занимается http. в чем конкретно теряем производительность?
А там во всем перечисленном есть залаги. Люди не старались выжать максимум, а старались просто написать всё, что нужно юзверям не заморачиваясь
🎉
Тем более есть жи бенчмарки, и на каком месте там грамм?
Aleksei
На первом
Aleksei
Среди фреймворков
Kirill
;)
$continue$
Пользовался, кто то нуклером в го?
🎉
Среди фреймворков
Где посмотреть на бенчмарки?
Kirill
выше вроде по-русски было же написано, но для true lazy devs - https://github.com/smallnest/go-web-framework-benchmark
🎉
Выше ссыль была
Я не вижу там первого места, не там смотрю?
Michael
Я не вижу там первого места, не там смотрю?
фастхттп это альтернативная реализация хттп
Aleksei
Там есть движки, есть просто роутеры и есть фреймворки. Все в одном бенчмарке. Из фреймворков грэймворк первый
Kirill
Но грэйм 2.0 будет на своём двигле
🎉
Аааа)) Но всё равно, для SPA я заюзаю свою поделку. Ибо вот пишу бота, было 6MB, импортнул sql стало 12.
Aleksei
Я надеюсь, что он обгонит даже сам fasthttp) тогда это вообще будет лол)
Aleksandr
да
🎉
билдани с -ldflags "-w -s" - вернись обратно к 6ти
Пока не к спеху, как допишу. Тада размер посмотрю.
Aleksandr
до 2-3 дожмем)
Kirill
до 2-3 дожмем)
Аще спокойно)
Kirill
оверхед маленький
Anonymous
Ну так-то стремиться есть ещё куда))
Kirill
а после upx grame -rwxr-xr-x 1 kirilldanshin staff 2,8M 29 янв 18:53 grame* -rwxr-xr-x 1 kirilldanshin staff 5,8M 29 янв 18:52 test*
Kirill
upx test и приходим к тому, что оверхед настолько незначительный по сравнению со временем, потраченным на вариант "ручками", что нет смысла этот вариант делать -rwxr-xr-x 1 kirilldanshin staff 2,8M 29 янв 18:53 grame* -rwxr-xr-x 1 kirilldanshin staff 2,0M 29 янв 18:52 test*
Kirill
go 1.9.2
🎉
а после upx grame -rwxr-xr-x 1 kirilldanshin staff 2,8M 29 янв 18:53 grame* -rwxr-xr-x 1 kirilldanshin staff 5,8M 29 янв 18:52 test*
Не дадим вам завоевать мир, а то ручками как делается забудем))
Kirill
Не дадим вам завоевать мир, а то ручками как делается забудем))
Ну - пока одни люди делают "ручками", другие решают бизнес-вопросы. Естественный отбор оставит на рынке вторых.
Diasko
Вечер добрый, подскажите как решить вот такую задачу https://play.golang.org/p/gWiOchJibet
Diasko
смысл в чем, как указать в интерфейсе функцию которая относиться к структуре по *
Diasko
Решение нашлось TestInterface(&t)
Alexander
Есть хорошее объяснение этого в Go FAQ - https://golang.org/doc/faq#different_method_sets
Alexander
У типа Test есть только метод GetT, а у *Test есть методы GetT и SetT
Roman
А как в рантайме создать массив?
Roman
У меня есть указатель на кусок памяти и размер, я знаю что там лежит n элементов, допустим, uint32
Alexander
arr := new([100]string)
Alexander
но вообще лучше slice использовать. Это тот же массив, только с динамическим размером
Alexander
какой такой указатель в go?
Roman
https://play.golang.org/p/An7jG5xl2W
Да, я так и делаю сейчас. Но у меня таких преобразований в слайс 50 млн в секунду
Илья
Да, я так и делаю сейчас. Но у меня таких преобразований в слайс 50 млн в секунду
это очень грустно, наверное, вы что-то делаете не так 🙂
Roman
это очень грустно, наверное, вы что-то делаете не так 🙂
Вопрос в том, как делать правильно :) У меня кольцевой буфер из 1024 элемента фиксированной длины (2048 байт). В эти элементы пишутся данные. Для каждого элемента мне известна длина
Roman
И мне ннадо к этим обращаться из go
Daniel
и что?
Daniel
при чем тут преобразования в слайс?
Roman
при чем тут преобразования в слайс?
Эмм... А какие есть альтернативы?
Roman
Можно даже сильно упростить: чего стоит слайс от уже имеющегося слайса?
Yura
Да, я так и делаю сейчас. Но у меня таких преобразований в слайс 50 млн в секунду
И что, профайлер говорит, что проблема именно в этом месте?
Nikita
Да, я так и делаю сейчас. Но у меня таких преобразований в слайс 50 млн в секунду
Могу предложить попробовать использовать sync.Pool и просто перезаписывать данные, чем аллоцировать новый каждый раз
Andrei 🦉
Вопрос в том, как делать правильно :) У меня кольцевой буфер из 1024 элемента фиксированной длины (2048 байт). В эти элементы пишутся данные. Для каждого элемента мне известна длина
у библиотеки freecache под капотом как раз кольцевой буфер работает, но там unsafe активно используется, глянь исходники, может найдешь что-нибудь полезное https://github.com/coocood/freecache
Roman
Могу предложить попробовать использовать sync.Pool и просто перезаписывать данные, чем аллоцировать новый каждый раз
Данные пишу не я, а ядро. Это кусок общей памяти между ядром ос и пользовательским процессом. Копировать не вариант, потому что все станет очень медленно
Roman
Что ты пишешь?
Биндинг к netmap
Andrei 🦉
сори, пора спать)
Roman
Что ты пишешь?
https://m.habrahabr.ru/post/183832/
Kirill
Тогда с результатами профайлинга cpu и mem в личку, а там проконсультирую
Kirill
Но тогда будь готов, могу тебе разломать картину мира, если ты в эти вопросы не вникал
Yura
Чуть позже гляну профайлером.
Так ты бы вначале глянул, а потом мозги полоскал всем. Если ты действительно кастишь поинтер в слайс таким образом, то вряд ли ты что-нибудь сильно быстрее изобретешь.
Kirill
Это далеко не самый быстрый вариант
Yura
Другое дело, если у тебя изначально поинтер есть на весь кольцевой буфер, то можно его кастить в массив, и доставать елемент по номеру: ring := (*[1024][2048]byte)(pointer) elem := (*ring)[n][:] Взятие слайса обязательно, иначе скопируется массив из 2048 байт.
Yura
Точно так же можно кастить поинтео в массив-элемент, и брать от него слайс: elem := (*(*[2048]byte)(pointer))[:]
Yura
А главное, все эти способы наверняка более-менее эквивалентны, с точностью до трех-четырех инструкций. И их легко проверить руками маленьким скриптом. А потом поделиться результатами. Вместо того, чтобы спрашивать.
🎉
Ну - пока одни люди делают "ручками", другие решают бизнес-вопросы. Естественный отбор оставит на рынке вторых.
Дело в том что, ты же переписывать собираешься? Вот как будет это выглядеть не понятно. Может стоит подождать новую версию?
🎉
Совместимость с первой версией будет
Хм, а это не отразится на скорости?
🎉
Будет ли новая версия быстрее старой?