分解物質
buzzword-driven development
Michael
какая-то х..ень в чате (
Michael
Vasiliy
Хай, народ ) насколько сильно вас будет коробить если например функция, которая называется ParseMessage([]byte) (*Message, error) будет врапиться над буфером не копируя байты? Или назвали бы функцию как-то иначе?
Constantine️
по скользкой дороге идешь
Slava
Vasiliy
Да, идеоматически согласен, весь I/O должен копировать, но там типа тема с малым оверхедом сделать. Короч, задача как сказать разработчику явно об этом...
Vasiliy
Сейчас попытаюсь объяснить. Это не классический net.Conn или io.Reader... Буфер создает сама либа, которая читает фреймы из сети. То есть она например создает, допустим 10 Мб и читает, отрезая слайсы сначала (в надежде что GC сама высвободит потом) и есть минимальный порог, например в 10 Кб, когда он пересоздает большой буфер. Потребителю вываливаются готовые сообщения. Многие свойства фрейма врапятся для того, чтобы не копировать.
Slava
1) Что создаёт в 10мб? если это выделенный в памяти массив, то gc ничего не освободит если на него есть ссылки хоть откуда
Slava
2) как переиспользуется буфер? как ты поймёшь когда готовое сообщение, ссылающееся на буфер уже не нужно?
Slava
ты пытаешься сделать zero memory allocation протокол
Slava
тогда никаких буферов не будет
Vasiliy
Буфер - при чтении. Пересоздание буфера не оставляет в цикле чтения на него ссылок. Ну там пайплайн ) сообщения не должны нигде сохраняться
Slava
ну раз не должны =)
Slava
выглядит как гаубица с лазерным прицелом в ногу
Slava
а смысл не ясен
Vasiliy
Да ) ща накидаю код
Slava
всё равно ты память выделяешь в итоге
Vasiliy
var buf []byte
for {
if len(buf) < 10000 {
buf = make([]byte, ...)
}
n, err := conn.Read(buf)
...
ch <- buf[:n]
buf = buf[n: ]
}
Slava
это чревато проблемами
Vasiliy
Да, и вкурсе какие это проблемы
Slava
читай в один буфер, который один раз выделил, копируй в сообщения
Slava
по скорости будет лучше
Vasiliy
Поэтому ищу способ об этом предупредить других разработчиков )
Slava
смотри, если ты щас не ответишь на мой вопрос, значит ты делаешь это неверно
Slava
вопрос такой, ты измерял производительности и тебя она не устроила и новое решение быстрее?
Slava
или это просто измышления?
Vasiliy
Да, бенчмарки показывают небольшой, но оверхед ) примерно 20%
Vasiliy
Буфер-пул с sync.Pool еще хуже, там почти в два раза почему-то
Slava
тебе не нужен синкпул для чтения тут
Slava
ты же читаешь в одном треде из сокета
Slava
тебе просто нужен буфер байтовый
Slava
но если у тебя быстрее работает, то пиши комментарий жирными буквами =)
Vasiliy
Ок )
Slava
а кто-то тестировал скорость компиляции в 1.9 ?
Slava
с этой параллельной компиляцией функций внутри пакета
Slava
https://github.com/nullbio/abcweb
Anatoly
magic
Igor
Фрэймворк на go, у которого:
Step 1: Install NodeJS.
немного настораживает
Anonymous
Хотел тоже самое написать, товарищ @makarov_igor опередил :)
Slava
Roman
А что за фреймворк "чай"? Не нагуглил. Оч лёгкий говорят
Mike
Anatoly
https://godoc.org/?q=cha
Anatoly
Что-то не гуглится
Roman
+1
Anatoly
Но это же просто роутер?
Michael
а справку почитать?
Anatoly
Роутеры в го дислокация повышенного анонизма, извините меня
Anatoly
Package chi is a small, idiomatic and composable router for building HTTP services.
Anatoly
Именно оттуда я и пришел
Anatoly
Что-то много энтропии, давайте с сылки начнем, если кто-то знает о каком пакете речь
Michael
you are looking for the big red button framework that makes you happy in one gesture
Anatoly
Если речь обомне, то больших красных кнопок мне хватило в дотнете, в го я начинающий и открыт ко всему стороннему опыту. Поэтому, ваш снобизм, Михаил, неуместен. Если проследить историю сообщений, то будет очевидно, что не я эту тему поднял, не я выдвигал версии о точном именовании пакета, а я лишь пытался понять о чем речь.
Anatoly
Топикстартер видимо смешал в голове все что слышал, потмоу что по имени фреймворка чай, гуглится только богомерзкий похапе фреймворк с компонентами из симфони: https://github.com/mloberg/Chai
Michael
причём снобизм? параграф Features, и, ниже, Examples
Сережа
chai это для js BDD фреймворк
Anatoly
https://github.com/nullbio/abcweb
Я понял, прост у меня произошел диссонанс после вот этого. Слишком разное понимание фреймворков. Чи это больше роутер с набором хелперов.
Constantine️
речь про https://github.com/go-chi/chi
Constantine️
Anatoly
А в джаве - металлургичекий завод полного цикла?)
Constantine️
да там капец
dev_sheep
Ребята, вот сижу блог пишу. Такой вопрос: хорошо ли будет хранить текст каждой статьи в бд (со всеми вытекающими: автор, метки и т.д.) и при обращении к какой-либо статье отдавать страницу, на которую контент вываливается из базы, либо лучше просто каждую статью хранить под "неким уникальным идентификатором" и отдавать отдельным файликом?
Ivan
dev_sheep
блин, вродь понятно все.. Ща перескажу по-другому
dev_sheep
Есть тип блог. В нем создается статья. Где ее правильно хранить?
dev_sheep
А точнее как: в базе, отдельным каким-то html-файлом
Сережа
есть тип поиск искаробки полнотекстовый в некоторых субд, если он тип нужен - вот тебе причина хранить в базе
Brown
dev_sheep
спасибо :)
Ivan
в базе, конечно)
dev_sheep
а то я все затупливал
Ivan
хотя нет. Ты же пишешь лабу, наверно? Может у вас там требования на диске файликом хранить. Так что не факт, что в базе лучше)
dev_sheep
Не смешно ) Себе пишу как портфолио
dev_sheep
нашел красивенький тэймплэйт
dev_sheep
понравился, решил запилить
Brown
Brown
Глянь как в вордпрессе сделанно
Brown
скопируй идеи