Loser story
901 subscribers
153 photos
22 files
142 links
Пишу всякое интересное про распределенные системы, базы данных и тд
https://github.com/MBkkt
Download Telegram
Вот знаете на прошлой работы мы писали свой тредпул, таски, таймеры, стренды, ну вы поняли, а для io просто заводили тредпул с asio event loop-ами, благо буст был.
Но в целом я сторонник того, чтобы взять готовое, но я тут подумал, что мне ничего в голову подходящего не приходит, asio плох для cpu bounded задач, по крайне мере, когда мы меряли было хуже нашей поделки.
folly здоровый пиздец и под android/ios наверно умру тащить, да и нужно оттуда совсем немного.
Плюс мы отказались от буста, интересно кст отдельно асио так то тоже не мелкий ну да не важно.
А tbb вроде без io bounded, да и мне не нравится. Не люблю эти task graph/flow like либы, стремная какая-то штука у кого-то был крутой опыт использования или ссылочка на рассказ как круто?
А никто не помнит названия сайта, который выглядел, как цветные соты (6 угольники) подписанные темами в алгоритмах, например, жадники, дфс, снм. При нажатии на соту выдавало список задач на тему.
Хотел скинуть ссылку, но не смог вспомнить название.
Я тут оподливился в ишью, но зато понял как расставить порядки слабее, в одном месте + их идею с active/inactive.
https://github.com/facebookexperimental/libunifex/issues/267
А в целом алгоритм такой "очереди" мне очень нравится, он кст довольно популярен, можно встретить в бусте и перфбуке например.
У меня возле старого дома, ходят трамваи, так вот раньше я их не любил громко, медленно, древние седушки как мир, сейчас еду на новом и збс
https://golang.org/src/sync/mutex.go?#L80 кст мне тут показывали прикольную, видимо оптимизацию, в golang.
Кажется в таком коде компилятору достаточно просто заинлайнить вызов lock. И тогда, если нам удастся сразу захватить лок, то не будет call(jmp) к коду, который загружен в какую-то жопу.
Почему в типо ресторанах (ну в каких-то дорогих я не бываю) всегда салаты странные? Ну то есть порезаны как то крупно обычно. Может мне кажется конечно
Я тут задумался насколько компании выгодно хорошее код ревью?
Тут стоит уточнить, что в тех местах где я работал на ревью обычно смотрят на плюсовую составляющую кода, если повезёт на многопоточность или алгоритмы, тут зависит от компетенции ревьювера.
Но в целом, особенно учитывая что я работаю в графике и не в геймдеве, лично у меня все как-то грустно.
Но даже если не брать в расчет мою специфику и посмотреть на другие пр, да и на тот же опенсурс, не редки случаи, когда максимум, что напишут в ревью, это какие то языковые нюансы, которые ты мог упустить случайно.
Ну это помимо кодстайла и очевидных багов/недостатков.
И мне вот интересно если в ревью выставлять теги и требовать апрувы по конкретным темам, типо язык программирование, многопточность, етс. Это будет явно больше и сложнее с точки зрения организации. Но будет ли это профитнее?
Как вы проводите ревью? (Забыл написать если вы не программист, или возможно не участвовали ни в каких проектах, голосуйте только результаты)
Anonymous Poll
19%
Не провожу
13%
Баги/фичи языка, поверхносто
20%
Вникаю в то что делает код, в 1/3 пр
11%
2/3
4%
99%
9%
Ревьювю пр в код который писал сам/очень хорошо знаком
43%
Результаты
Loser story
В общем пишу про работу тут, в целом почти все над чем я работал, особенно после стажки было очень интересным, например почти весь последний год писал новый рендер картографии, где-то даже успели на него перейти уже, а с декабря делал (уже не один правда)…
Собственно по поводу работы в мейле, я тут сейчас один над рендером работаю. И хоть на сайте нет вакансии, на самом деле она есть. Поэтому если вы/у вас есть знакомые на мидл-сеньор позицию заинтересованные, пишите расскажу подробнее и прорекомендую вероятно.
Я тут дочитал классный блог, думаю стоит рассказать, вот посты, которые мне показались наиболее интересные:
1. https://travisdowns.github.io/blog/2019/06/11/speed-limits.html про ограничения скорости исполнения программы на уровне железа, оно конечно не совсем применимо для большинства, но очень любопытно
2. https://travisdowns.github.io/blog/2020/07/06/concurrency-costs.html для тех кто не читает, то что я кидаю в общем немного про то как считать счётчики конкурентно, и в целом как понять что твой конкурентный код хорош вообще про это все более подробно можно почитать в perfbook, может быть теперь вы наконец-то решите его прочесть
3. https://travisdowns.github.io/blog/2020/05/13/intel-zero-opt.html прикольный эффект с заполнением нулями
4. https://travisdowns.github.io/blog/2019/08/20/interrupts.html Когда именно происходят прерывания? Вопрос интересен даже без полноценного ответа

В целом есть ещё интересные посты, но они наверняка вам в том или ином виде знакомы ('\0' vs 0, strict aliasing, порядок инклудов, етс. Если нет, читайте). Часть же постов немного специфична, в основном про avx512, не думаю что многим оно будет интересно
Channel photo updated
на самом деле написал про блог, только чтобы поменять аву, а то просто так уведомление как-то не хорошо
А ещё мне кажется, что я злоупотребляю зачеркнутым текстом.
Вообще вместо того что выше, хотел написать пояснения к design доку tcmalloc, а так же по сути отсутвующую там часть про transfer cache и central free list, но со мной приключилась ужасная история.
Я закрыл браузер с вкладкой с текстом набранным в telegraph. Собственно полезный для всех вывод:
никогда не используйте telegraph при написании чего то, только при публикации
А так постараюсь к концу недели переписать, плюс появилась пара идей, как сделать лучше/полезнее. В идеале хотелось сделать серию постов об аллокаторах, но это я далеко загадываю.
У меня раньше в яндекс еде были отдельные кнопочки, а сейчас эта мерзкая панелька целая, просто зачем??
О класс в хроме добавили ридинг лист.
https://xn--r1a.website/experimentalchill/110
Хотел напомнить, что если x86 умрет и мы все станем счастливыми обладателями arm-а везде, то помимо снижения энергопотребления, более сложной архитектуры кешей => лучшей производительности хорошего конкуретного кода (и куче багов в плохом).
У нас ещё и везде будет load link (условно, атомарно загрузить значение и поставить флажок) store conditional (атомарно смотрит никто ли не тронул флажок и если никто, то устанавливает значение) вместо lock; cmpxchg.
Который фейлится, если кто-то потрогал кешлинию (еще иногда на самом деле, например, когда был switch context потоков ОС)
И как следствие из того как он работает, cas написанный с его помощью не подвержен ABA проблеме.

Собственно если кому то не очевидно как это реализовать, выглядит это например так:
https://elixir.bootlin.com/linux/latest/source/arch/arm/include/asm/cmpxchg.h#L254
ldr* это load link
str* это store conditional
Я по-моему уже где-то спрашивал, но зачем на работе всегда пишут приветствия с восклицательным знаком, я мб не грамотный, но я не могу придумать применения восклицательному знаку, кроме цитирования устной речи или чего-то вроде "?!??!?".
Ну и обычно если вы с кем-то здороваетесь устно, вы говорите это спокойно?
В общем странная фигня какая-то.
Ещё прочитал статьи:
https://research.swtch.com/mm
tldr
1) Классические примеры хардварной модели памяти, и какие исполнения допускают процессоры.
2) Почему несмотря на относительную простоту 1) все на самом деле сложно: оптимизации компиляторов, необходимость или relaxed atomic-ов или валидности программ с data race
3) Собственно про изменения которые они планируют в golang.
Из интересного:
1. В отличие от Java/JavaScript, они явно утверждают, что если в программе обнаружится гонка то программа может сообщить о ней и упасть, а не как-то "не очень опасно" работать
2. Оказывается разработчики архитектур думают о нас простых смертных и делают seq_cst/java volatile более дешёвым с точки зрения исполнения, например на armv8 acq_rel ~ seq_cst для load/store, как следствие наверно в будущем все сведётся к наличию seq_cst и relaxed(unsync) атомикам. Потому что кажется, без последних достаточно сложно обеспечить хорошую производительность некоторых thread safe структур данных/статистики
photo_2021-08-14_23-45-00.png
165.9 KB
Я видимо перепоступил на фиит пмпу (кст бтв 0 знакомых оттуда, в отличие от пми, ну узнаю что за шарага)