О каких оптимизациях компилятора, CLR или ЦП следует помнить при работе с потоками и неблокирующей синхронизацией?
-
13-09-2019 - |
Вопрос
Как следует из названия, о каких оптимизациях компилятора, CLR или ЦП следует помнить при работе с потоками и неблокирующей синхронизацией?
Я немного прочитал об изменении порядка инструкций для повышения эффективности, которое может привести к поломке, и об оптимизации кэширования, которая приведет к тому, что переменные не будут сразу видны другим потокам. [0], но есть ли еще (я уверен, что они есть), о которых мне нужно знать?
Будем очень признательны за любые ссылки на рекомендуемую литературу/блоги/статьи/и т. д.
Спасибо, Эгиль.
Обновлять: Благодаря ссылке Джонса на сообщение в блоге Джо Даффи я нашел гораздо больше полезной информации, которой решил поделиться с вами, ребята:
- Основная статья, на которую многие указывают, — это Понимание влияния методов низкой блокировки в многопоточных приложениях Вэнс Моррисон.
- Что должен знать каждый разработчик о многопоточных приложениях, также написанный Вэнсом Моррисоном, является отличным освежителем для тех из нас, кто не занимается ежедневно многопоточными приложениями.
- Джо Даффи 9 многоразовых параллельных структур данных и алгоритмов это тоже отличное чтение.
- Еще то же самое от Джеффри Рихтера в его Столбец «Конкурентные задачи» Синхронизация потоков с учетом производительности.Его реализация SpinWaitLock довольно хороша.
- В целом, Колонки по вопросам параллелизма в журнале MSDN Magazine очень рекомендуются.
Решение
По сути, вам нужно знать о модели памяти .NET.Не обращайте внимания на то, какие оптимизации выполняются в данный момент — кодируйте модель.
Я бы посоветовал этот пост в блоге Джо Даффи как хорошая отправная точка.
Я бы также рекомендовал вам не создайте свой собственный код блокировки.ИМХО, это слишком сложно для смертных.Используйте такие платформы, как Parallel Extensions (в .NET 4.0), которые подходят именно вам.
Другие советы
У Джо Даффи есть отличная книга под названием «Параллельное программирование в Windows", которую я определенно рекомендую прочитать, если вы интересуетесь параллелизмом в Windows (включая программирование без блокировок).