Информация об изменениях

Сообщение Что почитать про многопоточность? от 15.09.2019 12:25

Изменено 17.09.2019 12:58 Basil2

Что почитать про многопоточность?
Несмотря на большой опыт, довелось использовать только mutex и event; да еще разок скопипастил код с conditional variable. А хочется войти в тему поглубже — как в принципе грамотно организовать многопоточное приложение. Но если гуглить, везде в основном описывают разные примитивы синхронизации и что надо захватывать ресурсы в одном порядке, а это я и так знаю. Более интересны паттерны дизайна на эту тему, а также тонкие моменты.

Например, я как-то сделал класс для многопоточного счетчика через операцию ++. А тимлид сказал что так нельзя, ибо стандартная сигнатура операции ++ не позволяет корректно вернуть результат в многопоточной среде, и надо использовать функцию-член типа inc(). Вот таких нюансов хотелось бы (не в смысле С++, а в смысле принципов работы с переменными).

Конкретно, стоит задача написать сервер для небольшой сессионной MMO-игры. Я интуитивно понимаю, что клиентов надо обрабатывать в разных потоках, чтобы использовать все ядра проца. И притом желательно через тред-пул, поскольку клиент=поток будет слишком накладно если много клиентов. Но выразить это в грамотную архитектуру не могу (могу наколбасить связку из мутексов и возможно будет работать), но хочется ясного понимания как это спроектировать.

Что посоветуете прочитать?
Что почитать про многопоточность?
Несмотря на большой опыт, довелось использовать только mutex и event; да еще разок скопипастил код с conditional variable. А хочется войти в тему поглубже — как в принципе грамотно организовать многопоточное приложение. Но если гуглить, везде в основном описывают разные примитивы синхронизации и что надо захватывать ресурсы в одном порядке, а это я и так знаю. Более интересны паттерны дизайна на эту тему, а также тонкие моменты.

Например, я как-то сделал класс для многопоточного счетчика через операцию ++. А тимлид сказал что так нельзя, ибо стандартная сигнатура операции ++ не позволяет корректно вернуть результат в многопоточной среде, и надо использовать функцию-член типа inc(). Вот таких нюансов хотелось бы (не в смысле С++, а в смысле принципов работы с переменными).

Конкретно, стоит задача написать сервер для небольшой сессионной MMO-игры. Я интуитивно понимаю, что клиентов надо обрабатывать в разных потоках, чтобы использовать все ядра проца. И притом желательно через тред-пул, поскольку клиент=поток будет слишком накладно если много клиентов. Но выразить это в грамотную архитектуру не могу (могу наколбасить связку из мутексов и возможно будет работать), но хочется ясного понимания как это спроектировать.

Что посоветуете прочитать?


P.S. Языком, скорее всего, будет не(!) С++, поэтому желательно без привязки к языку.