Дальнейшее чтение:
Я хотел бы представить несколько моих статей, которые интересуются общими примитивами синхронизации, и они углубляются в Monitor, поведение оператора C # lock, свойства и затраты в зависимости от различных сценариев иколичество потоков.Он особенно заинтересован в потерях ЦП и периодах пропускной способности, чтобы понять, сколько работы можно выполнить в нескольких сценариях:
https://www.codeproject.com/Articles/1236238/Unified-Concurrency-I-Introduction https://www.codeproject.com/Articles/1237518/Unified-Concurrency-II-benchmarking-methodologies https://www.codeproject.com/Articles/1242156/Unified-Concurrency-III-cross-benchmarking
Оригинальный ответ:
О, дорогой!
Кажется, что правильный ответ, помеченный здесь как ОТВЕТ, по своей сути неверен!Я хотел бы попросить автора ответа, с уважением, прочитать связанную статью до конца. article
Автор статьи 2003 article проводил измерения только на двухъядерной машине, а в первом случае он измерял блокировку с помощью одноготолько для потока , и результат составил около 50 нс на блокировку доступа.
Это ничего не говорит о блокировке в параллельной среде.Поэтому мы должны продолжить чтение статьи, и во второй половине автор измерял сценарий блокировки с двумя и тремя потоками, который приближается к уровням параллелизма современных процессоров.
Итак, автор говорит, что с двумяна двухъядерных процессорах, блокировки стоят 120 нс, а с 3-мя потоками - до 180 нс.Таким образом, кажется, что он явно зависит от количества потоков, одновременно обращающихся к блокировке.
Так что все просто, это не 50 нс, если это не один поток, где блокировка становится бесполезной.
Еще одна проблема для рассмотрения состоит в том, что она измеряется как среднее время !
Если бы измерялось время итераций, то были бы даже времена от 1 мс до 20 мс, просто потому, чтобыл быстрым, но лишь немногие потоки будут ожидать процессорного времени и нести даже миллисекундные задержки.
Это плохие новости для любого типа приложений, требующих высокой пропускной способности и низкой задержки.
Последний вопрос, который следует рассмотреть, заключается в том, что внутри блокировки могут быть более медленные операции, и очень часто это так.Чем дольше выполняется блок кода внутри замка, тем выше конкуренция и задержки поднимаются до небес.
Обратите внимание, что с 2003 года прошло уже более одного десятилетия, то есть несколько поколений процессоров, разработанных специальноработать полностью одновременно, а блокировка значительно ухудшает их производительность.