Подальше читання:
Я хотів би представити кілька моїх статей, які цікавляться загальними примітивами синхронізації, і вони копаються у поведінці, властивостях та витратах оператора замкнення 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, і в першому випадку вимірювання він вимірював блокування лише однією ниткою, і результат становив близько 50н за доступ до блокування.
Це нічого не говорить про замок в одночасному середовищі. Отже, ми маємо продовжувати читати статтю, і у другій половині автор вимірював сценарій блокування двома та трьома потоками, що наближається до рівнів одночасності сучасних процесорів.
Так автор каже, що з двома потоками на Dual Core, блоки коштують 120ns, а з 3-х потоків - це 180ns. Таким чином, здається, це чітко залежить від кількості потоків, що одночасно отримують доступ до блокування.
Так що це просто, це не 50 нс, якщо це не єдина нитка, де замок стає марним.
Іншим питанням для розгляду є те, що він вимірюється як середній час !
Якби час ітерацій було виміряно, було б навіть час від 1 мс до 20 мс, просто тому, що більшість було швидко, але мало потоків будуть чекати процесорів час і матимуть навіть затримки в мілісекундах.
Це погана новина для будь-яких програм, які вимагають високої пропускної здатності та низької затримки.
І останнє питання для розгляду полягає в тому, що всередині замка можуть бути повільніші операції, і дуже часто це відбувається. Чим довше блок коду виконується всередині блокування, тим вища суперечка і затримки піднімаються на висоту.
Зауважте, що вже минуло десятиліття вже з 2003 року, що мало поколінь процесорів, призначених спеціально для одночасного запуску, і блокування значно погіршує їх продуктивність.