Roman
А в чём профит?
Меньше lock contention на объектах ядра
Сергей
Меньше lock contention на объектах ядра
А как быть с разделяемой памятью?
Сергей
И на сколько я понял, будет тяжелее загрузить ядра процессора равномерно, хотя могу ошибаться
Сергей
Как по мне, довольно круто утилизируется многоядерность в Erlang-e.
.
Кстати, в Эрланге как акторы реализованы? Тоже поверх тредов ОС как горутины?
Andrei 🦉
Для чего она нужна?
а зачем заморачиватся с тредами,если вам не нужна общая память? нафоркали процессов и все хорошо на любом языке программирования
ainu
Ладно, спрошу не про дженерики: что вы делаете, если ваш код медленный, а возможности по оптимизации уже исчерпаны?
1. zero memory allocation между запросами 2. перевести с мапов на массивы 3. найти copy() и аллокации, убрать 4. поиграться с типами. зачастую Int быстрее чем int32/bool 5. зверская магия, когда есть map, допустим из 50 элементов, делается make(map, 50), и копируется - чтение из нового будет быстрее, до 20-50% иногда. 6. алгоритмы! O(n) и все такое. 7. вместо стандартной библиотеки юзать свои функции (например которые вместо {}interface будут юзать int) 8. string поменять на слайс byte, когда есть промежуточные переводы туда сюда. Но это ерунда на самом деле. 9. если функции чистые и руки прямые, то можно в ассемблер залезть и там поковырять.
Сергей
Ксати, в Erlang тоже неразделяемая память + на каждый легковесный процесс свой GC
Васильев Виктор
это в ответ на вопрос, что делать, когда возможные оптимизации выполнены, перечислили возможные оптимизации? (int vs int32, без пруфов я бы не принял)
Чаще всего пруфы тут и не нужны. Хотя да с пруфами все лучше :) Тут все проще. Компилятор лучше знает на какую платформу он компилит(если код кроссплатформенный изначально), тогда и выравнивание и копирование и операции с аппаратным int будут быстрее илучше :)
Васильев Виктор
Чаще всего int32 или int64 нужны только в конкретных ситуациях где именно это и необходимо в остальных случаях обычный инт выигрывает
Илья
я, может быть, плохой сварщик (скорее всего, даже не настоящий), но чтобы int64 операции обгоняли int32, вроде не натыкался
ainu
ainu
конечно это больше статистическое отклонение может быть
Pawel
Я про стандарт вроде pandas/tensorflow
pandas/tensorflow не обсчитвают вечность исключительно благодаря GPU, которым GIL действительн оне помеха.
Pawel
Вы утверждаете что без gpu они не будут работать? :)
как правило при росте базы примерно до 20-30 гигов без GPU всё немножко становится рачком
Pawel
Они есть, а если нет, то есть @pycall + легко вызывать сишные либы
это смешно. Так можно любой ЯП брать для ML и потом манаться с биндингами
Dorian
за счет чего быстрее?
Скорее всего из за того что при росте не ищет новый фрагмент памяти с достаточным количеством места под новый слайс
Илья
за счет чего быстрее?
заранее инициализуется нужный размер, а не наращивается в append
Roman
ainu
за счет чего быстрее?
Ну если в размер не вместилось, append будет создавать копию массива.Например два варианта: z := []int{}; for i:=;i<=100;i++ { z = append(z, i) } //второй вариант z := make([]int,100); for i:=;i<=100;i++ { z = append(z, i) }
l3xxxy
а чо поцоны есть жирдяи среди вас гоферов
l3xxxy
как боретесь
l3xxxy
???
Roman
Есть основные либы + NumPy встроен в язык
а cuda? и вот все то счастье в виде готовых и протестированных библиотек?
.
А так да, понятно почему)
l3xxxy
я написал прогу на гоу, там в цикле отжимания и подтягивания, бег, но как скомпилировать и загрузить себе в мозг хз, кто нибудь сталкивался?
ainu
суть в том что append создает новый массив и цепляет к нему слайс, если старый массив переполнен. Ему можно подсказать, чтобы заранее массив был большим.
.
кстати, что оптимизируют в первую очередь?
Сергей
а cuda? и вот все то счастье в виде готовых и протестированных библиотек?
Видел. Не могу сказать что всё прям отлично оттестировано и проверено на проде
ainu
сначала работу с диском, потом алгоритмы и аллокации =)
ainu
остальное это экономия на спичках
Сергей
Первая версия вышла совсем недавно
Roman
Видел. Не могу сказать что всё прям отлично оттестировано и проверено на проде
ну и о чем речь? кому интересно воевать с непонятными багами решая конкретную задачу?
.
я в целом о вебе
Roman
сначала работу с диском, потом алгоритмы и аллокации =)
а что с диском? программы на диск не пишут. практически никогда.
Сергей
ну и о чем речь? кому интересно воевать с непонятными багами решая конкретную задачу?
Мне было интересно. Не скажу что прям много багов. Да есть шероховатости. Возможно я просто не решал сложных задач с этим яп
ainu
а что с диском? программы на диск не пишут. практически никогда.
могут читать. с mysql например, при каждом запросе дергать какую нибудь фигню или чтото подобное. или какойнибудь конфиг в json
саша
про иммутабельность кстати я хз. у меня есть мнение что ее полезность и необходимость в большинстве случаев преувеличена
Мутабельное расшареное состояние - главный источник сложности ПО. Именно поэтому ООП - полное дерьмо, в нём shared mutable state достигает своего апогея. Хотя в го это не актуально, ибо всё состояние приложения хранится (почти) всегда в базе.
ainu
просто доступ к диску на порядки дороже доступа к памяти
ainu
опять таки аллокация памяти на порядки дороже записи/чтения из памяти
.
Проще говоря БД тюнить)
Сергей
ну например копировать сообщения в каждую горутину
Сергей
Если можно пошарить ссылку
ainu
да и не читают тоже, кстати )
Ну, значит если при каждом запросе читают-пишут, то вот этот кусок и надо оптимизировать, чтобы перестал
саша
Иногда без него никак
Ключевое слово - иногда. Именно поэтому, например, в расте переменные по дефолту иммутабельные и мутабельными они становятся только после добавления модификатора mut.
саша
а ты попробуй поработай с JSON в C++, поймёшь почему нам interface{} нужен)
В цпп как бы уже есть хоть и костыльные, но типы суммы, и поэтому работа с JSON, там должна быть на порядок типобезопаснее.
Алексей
Толку от тип сумм, когда рефлексии нет и нужно ручками всё расфасовывать?
саша
интерфейсы - „не абстракции“ структуры - „не абстракции“ пакеты - „не абстракции“ вы так говорите будто Go это C
Го это C, только с пустыми интерфейсами вместо void*, GC, и всяким сахаром и магией добавленной в язык. А, ну ещё плюс конкурентный рантайм.
Алексей
Чтобы эти самые типы автоматически в json распихать
Алексей
Вот в C++ такого просто так не выйдет
Алексей
тут либо кодогенерация, либо макро и шаблонная магия
Roman
Стоп, а зачем рефлексия?
в таком случае JavaScript это C++, только без %остустсвующие_фичи% и с %присутствующие_фичи%
Roman
https://mholt.github.io/json-to-go/
Roman
))
саша
Чтобы эти самые типы автоматически в json распихать
Мы видимо о разном говорим. Я говорю о "гетерогенном" типе JSON
Dorian
Как забыть про обьекты и релейшины и начать жить?