Ulteriore lettura:
Vorrei presentare alcuni dei miei articoli, che sono interessati alle primitive di sincronizzazione generali e stanno scavando in Monitor, comportamento dell'istruzione di blocco C #, proprietà e costi a seconda di scenari distinti e numero di thread. È specificamente interessato allo spreco di CPU e ai periodi di throughput per capire quanto lavoro può essere eseguito in più scenari:
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
Risposta originale:
Oh caro!
Sembra che la risposta corretta contrassegnata qui come LA RISPOSTA sia intrinsecamente errata! Vorrei chiedere all'autore della risposta, rispettosamente, di leggere l'articolo collegato fino alla fine. articolo
L'autore di questo articolo a partire dal 2003 l'articolo stava misurando il unica macchina Dual Core e nel primo caso di misura, ha misurato bloccaggio con un solo filo e il risultato era di circa 50 ns per l'accesso serratura.
Non dice nulla su un blocco nell'ambiente simultaneo. Quindi dobbiamo continuare a leggere l'articolo e nella seconda metà, l'autore stava misurando lo scenario di blocco con due e tre thread, che si avvicina ai livelli di concorrenza dei processori odierni.
Quindi l'autore dice che con due thread su Dual Core, i blocchi costano 120 ns e con 3 thread si arriva a 180 ns. Quindi sembra essere chiaramente dipendente dal numero di thread che accedono al blocco contemporaneamente.
Quindi è semplice, non è 50 ns a meno che non sia un thread singolo, dove il blocco diventa inutile.
Un altro aspetto da considerare è che viene misurato come tempo medio !
Se il tempo delle iterazioni venisse misurato, ci sarebbero anche tempi compresi tra 1 ms e 20 ms, semplicemente perché la maggior parte era veloce, ma pochi thread aspetteranno il tempo dei processori e subiranno ritardi anche millisecondi.
Questa è una cattiva notizia per qualsiasi tipo di applicazione che richiede un throughput elevato e una bassa latenza.
E l'ultimo problema da considerare è che potrebbero esserci operazioni più lente all'interno della serratura e molto spesso è così. Più a lungo viene eseguito il blocco di codice all'interno della serratura, maggiore è la contesa e i ritardi aumentano alle stelle.
Si prega di considerare che è già passato più di un decennio dal 2003, ovvero poche generazioni di processori progettati specificamente per funzionare completamente contemporaneamente e il blocco sta danneggiando considerevolmente le loro prestazioni.