Дальнейшее чтение:
Я хотел бы представить несколько моих статей, которые интересуются общими примитивами синхронизации, и они углубляются в Monitor, поведение оператора блокировки C #, свойства и затраты в зависимости от различных сценариев и количества потоков. Его особенно интересуют потери ЦП и периоды пропускной способности, чтобы понять, какой объем работы можно выполнить в нескольких сценариях:
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
Оригинальный ответ:
О, Боже!
Кажется, что правильный ответ, отмеченный здесь как ОТВЕТ, по своей сути неверен! С уважением прошу автора ответа прочитать связанную статью до конца. статья
Автор статьи из 2003 статьи измерял только на Dual Core машины и в первом измерительном случае он измеряется замок только с одним потоком , и результат был примерно 50ns за доступ замка.
Он ничего не говорит о блокировке в параллельной среде. Итак, мы должны продолжить чтение статьи, и во второй половине автор измерял сценарий блокировки с двумя и тремя потоками, который приближается к уровням параллелизма современных процессоров.
Итак, автор говорит, что с двумя потоками на Dual Core блокировки стоят 120 нс, а с 3 потоками - до 180 нс. Таким образом, это явно зависит от количества потоков, одновременно обращающихся к блокировке.
Это просто, это не 50 нс, если только это не один поток, где блокировка становится бесполезной.
Другой вопрос, требующий внимания, - это то, что оно измеряется как среднее время !
Если бы время итераций было измерено, было бы даже время от 1 мс до 20 мс, просто потому, что большинство из них было быстрым, но немногие потоки будут ждать времени процессора и будут иметь длительные задержки даже в миллисекунды.
Это плохая новость для любого приложения, которому требуется высокая пропускная способность и низкая задержка.
И последний вопрос, который следует учитывать, заключается в том, что внутри блокировки могут выполняться более медленные операции, и очень часто это так. Чем дольше блок кода выполняется внутри замка, тем выше конкуренция, а задержки растут до небес.
Учтите, что с 2003 года прошло уже более одного десятилетия, то есть несколько поколений процессоров, разработанных специально для работы полностью одновременно, и блокировка значительно снижает их производительность.