Маjко
Daniel
Маjко
Маjко
Мач перформанс
Daniel
ой, перестаньте
🏁Александр
🏁Александр
если сотворили глобальный счетчик какой либо
Маjко
🏁Александр
да знаю про них
Daniel
ну вот
🏁Александр
они же мьютекс оборачивают?
Daniel
нет, наоборот
Cat
Маjко
Daniel
это мутексы сделаны на атомиках
🏁Александр
не знаю
🏁Александр
в кишки не лезу по возможности
🏁Александр
работаю по возможности как с "черным ящиком"
Daniel
а надо бы знать, если на перформанс топить
🏁Александр
обычно перфоманс явно просаживается не на уровне приложения
Daniel
"барьеры памяти" в нем базовые. с тех пор, как в проце есть кеш, и ядер больше одного
heavycharged
копию пробрасывая...
подлянка в том, что даже если саму структуру копировать, то её ссылочные поля передаются по ссылке, и всякие слайсы/мапы тоже, что делает процесс копирования генерацией бойлерплейта
Daniel
на самом деле - это все вопрос дизайна
Daniel
совершенно не обязательно шарить что попало
Daniel
самое неприятное в каналах то, что они медленные
Daniel
правда, узнать об этом можно только в очень специфических случаях
heavycharged
я не сильно компетентен в хайлоаде, но мне кажется, что если каналы стали боттлнеком, то нужно пересмотреть используемые инструменты и подход.
Cat
Daniel
да
Маjко
Понятно
Roman
Roman
увы, я на такое натыкался =(
Roman
Маjко
Nik
В го есть атомики?
Марина
#вакансия #go #python #ruby #MachineLearning #ML #офис #fulltime
Всем привет! 🦋
Кто давно хотел перейти в разработку на Go? 😊 Сейчас именно тот момент!
Готовы знакомиться с опытными разработчиками, имеющими разный бекграунд (Python/Ruby/Java) и готовых переходить на Go.
О компании: стартап, этап активного формирования команды.
О проекте: разработка платформы, позволяющей автоматически создавать решения на базе машинного обучения для бизнеса.
Основные задачи:
- Создание инфраструктурных решений
- Выстраивание архитектуры приложений
- Разработка и поддержка микросервисов
г. Москва, м. Охотный ряд
ЗП: 150 - 250к на руки
Фултайм в офисе (Возможность иногда работать удаленно).
C подробностями можно ознакомиться здесь:
https://vacancy.newhr.ru/golang/4
С радостью отвечу на все вопросы по почте: marina@new.hr 😊
Вакансия представлена агентством https://newhr.ru/
Спасибо!
Daniel
многабукв. что там в двух словах? сброс кеша невовремя?
Roman
Это как?
процессоры видят память через кеш. использование атомиков приводит к инвалидации кеш-линии конкретного ядра + в дело включаются алгоритмы когерентности кешей(нам надо эту кеш-линию сбросить у соседних ядер на этом же кристалле, а если сокетов больше одного - то еще и в соседний cpu ннадо)
Daniel
сброс кеша невовремя...
Roman
heavycharged
альтернатив то нет. или есть?
Roman
ну и при contention атомики становятся еще более дорогими
Roman
для понимания ужаса можно посмотреть на http://htor.inf.ethz.ch/publications/img/atomic-bench.pdf
Daniel
но вариантов-то нет, кроме как не пользовать шареную память вообще
Roman
альтернатив то нет. или есть?
нет, да. точнее, атомики плохи при contention. когда несколько потоков используя атомики модифицируют одну и ту же переменную
Маjко
Roman
heavycharged
@pragus спасибо за статью.
Daniel
и тут мы возвращаемся к вопросу о производительности. запросто на современном проце код с копированием памяти может оказаться быстрее, чем код с передачей указателя и мутексом. если все сойдется так, что копирование произойдет в кеше
Roman
Roman
вообще, самый правильный вариант - писать так, чтобы взаимодействия между горутинами/тредами было минимум.
Roman
и не шарить вообще никаких данных
Маjко
Roman
Daniel
данные обычно мутировать не надо.
Roman
если чтения больше чем модификации, оно почти lockless )
Cat
и не шарить вообще никаких данных
"не шарить" в смысле не иметь одновременного доступа к одним и тем же данным?
значит нужно передавать данные по каналам?
но каналы же медленные?
Cat
Маjко
Daniel
конечно. вы и про атомик узнаете только если напишете херню - будете модифицировать счетчик часто и из разных тредов
Roman
Маjко
Roman
Маjко
Ага
heavycharged
По поводу тестов, тестировать нужно все 😊
Даже простые функции, пусть она просто складывает 2 + 2.
С этим не соглашусь
Маjко
Человек, возможно, из мира динамической типизиции пришел, где тестировать нужно всё, чтобы не огребать от проблем с типами
Je
Тестировать нужно, но не обязательно писать тесты на такие функции, достаточно, чтобы в покрытие попадала другими более высокоуровневыми тестами
heavycharged
ну обычно тестят внешний API и ещё какие-то сложные функции.