3 слова про 2 потока Простыми словами
Победная поступь роста мегагерц давно сменилась победной поступью числа ядер, поэтому программы отчего-то все чаще и чаще приходится писать многопоточные, задумываясь хотя бы иногда про всякие банальные глупости типа гонок, атомиков, мьютексов, и всего такого.
Как обычно, методички есть всегда. Как полагается, написано внутри не всё. (Как всегда, никто даже тезисы не читает.) Поэтому я постараюсь вкратце рассказать про наиболее ходовые механизмы и концепции (mutex, semaphore, rwlock, atomic, spin-locking, exponential backoff, lock free, wait free...) и их внутреннее устройство, с одной стороны. Про реальные ходовые показатели всего этого добра на текущем (серверном) железе с другой стороны. Про стандартные "многопоточные" ошибки и нехитрые инструменты и методы их ликвидации с третьей. И, конечно, посмотрим пару занятных, но вполне себе практических примеров из разряда "где внезапно тормозит" или там "отчего внезапно не скейлится".
Пишет код на всём подряд, показывает другим как. В удачные дни код удается сносить, это обязательно показывает другим и заставляет "точно так же" втройне сильнее. Всю сознательную жизнь из этого выходят разные движки, прямо проклятие какое-то.