Wingman
ну вот, и таких объектов тыщщщи
🏁Александр
ну это как то не совсем корректно имхо
Wingman
и локов тогда будут сотни тыщщ
Wingman
мб как вариант хранить не ссылки, а копии — но тогда при любых изменениях нужно будет все объекты обходить и заменять, тоже не айс
🏁Александр
я сразу об этом подумал
🏁Александр
это сожрет такое количество памяти
Wingman
угу и доп.неудобства при модификации
🏁Александр
может бизнес задачу обрисуете?
🏁Александр
что-то мне кажется тут проблема в построении архитектуры
🏁Александр
не с того конца копаем
Wingman
ну... мониторинг оборудования ; с одной стороны - постоянный его опрос по snmp/telnet/ssh, с другой - приём и парсинг логов и snmp трапов
🏁Александр
а объекты в которые вы так старательно кормите профили, это что?
🏁Александр
событие на оборудовании?
Wingman
само оборудование
🏁Александр
и у них общие "поля"?
Wingman
да
🏁Александр
для чтения?
🏁Александр
или вы пишите из сущности тоже?
Wingman
ну, к примеру, в профиле указано, как ходить на железо - telnet/ssh, логин-пароль; интервалы опроса и т.д.
Wingman
в основном для чтения
🏁Александр
что-то тут подозрительно
Wingman
почему?)
Wingman
в том и смысл, чтобы не настраивать каждую железку индивидуально, а унифицировать конфигурацию
🏁Александр
ну в данном случаи этот профиль будет якорить всю очередь
🏁Александр
у вас есть телевизор, холодильник и микроволновка. Если вы их запросили одновременно, то из за общего профиля "питание" они будут выполнены один-за-одним
🏁Александр
вернее получены
🏁Александр
потому что на питании стоит лок на чтение
Wingman
ну есть ещё rwmutex
🏁Александр
есть
🏁Александр
интересно без локов, чтение прокатит 🙂
🏁Александр
или мы таки умрем где то по дороге
Daniel
Так поеду
🏁Александр
Типа того
нужно ваше экспертное мнение 🙂
Daniel
На какую тему?
🏁Александр
у человека есть телевизор, холодильник и микроволновка. У них есть ссылка на профиль "электропитание"
Wingman
На какую тему?
насколько дороги очень частые локи мьютексов для проца/кеша/системы в целом? :)
🏁Александр
при чтении любой сущности, он лочит электропитание
🏁Александр
и сразу стоит вопрос производительности
🏁Александр
ибо тогда "многопоточность" схлопывается до 1 потока фактически
Wingman
да не схлопывается она, если rwmutex
Wingman
по идее)
Daniel
Не схлопывается
Wingman
но вот постоянное их дёргание мне не нравится само по себе
Daniel
Смотрите
Daniel
Самый быстрый из синхронизаторов - atomic
🏁Александр
а он разве не на мьютексах? 🙂
Daniel
Ровно наоборот
🏁Александр
я что-то думал что это такая оберточка, что бы попроще
Wingman
да я даже не про скорость: у меня 90% замедления в сетевом io будет а вот нагрузка на проц, мне кажется, будет плачевна
Daniel
И, если профайлер показал, что вы именно на мьютексе тратите время - можно попробовать
Wingman
Не надо это все думать, надо мерять
для этого сначала надо реализацию написать а я как раз думаю, как именно её писать :)
Daniel
Как проще!
Wingman
позже менять - почти всё переписывать нафиг
Daniel
Если геттер-сеттер выделить - все изменения коснутся только его
🏁Александр
Смотрите
погуглил тут про rw.RLock(), не совсем понимаю зачем он нужен, он же лочит на чтение. Мы же получаем все равно сможем нагадить из паралельного процеса. Или он преостанавливает, если к нам кто-то пишет?
heavycharged
да
heavycharged
все читают, но когда приходит писатель, то все ждут.
🏁Александр
но есть же вероятность, при большой нагрузке
🏁Александр
что мы прошли успешно RLock, и тут началась запись
🏁Александр
и мы опять с голой попой
heavycharged
ну так он ждет
heavycharged
пока выйдет rlock
heavycharged
и зайдет сразу
🏁Александр
а, с другой стороны запись тоже смотрит что бы пустой список локов был?
heavycharged
там безопасно все. но тут нужно смотреть, иногда выгодней юзать обычный лок.
G72K
Вроде как Prepared Statements в Го работают не так, как ожидается, и для каждого запроса создаётся новое соединение
я про ограничения PgBouncer: https://pgbouncer.github.io/faq.html#how-to-use-prepared-statements-with-transaction-pooling
🏁Александр
вот я и пытаюсь врубиться, почему не обычный лок
🏁Александр
для записи то нам в любом случаи его придется юзать
🏁Александр
почему бы не залочить тогда все к едреной
heavycharged
если ты чаще читаешь, чем пишешь, то выгодно юзать RWMutex
heavycharged
если там чтение запись 1:1 или запись чаще, тогда лучше на обычный Mutex, но это пусть лучше гуру подскажут. Я в книге читал это, и встатьях часто упоминается.
Wingman
почему бы не залочить тогда все к едреной
потому что тогда будет, как вы сказали, "схлопывание до одного потока"
🏁Александр
а тут типо мы читаем как будто лока вообще нет, пока не придет писатель?
heavycharged
да
heavycharged
там даже скорость вообще практически не проседает, емнип.
heavycharged
я как-то замерял