Otras lecturas:
Me gustaría presentar algunos artículos míos que están interesados en primitivas de sincronización generales y están investigando el comportamiento, las propiedades y los costos de las declaraciones de bloqueo de C #, según los distintos escenarios y la cantidad de subprocesos. Está específicamente interesado en el desperdicio de CPU y los períodos de rendimiento para comprender cuánto trabajo se puede impulsar en múltiples escenarios:
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
Respuesta original:
¡Oh querido!
Parece que la respuesta correcta marcada aquí como LA RESPUESTA es intrínsecamente incorrecta. Me gustaría pedirle al autor de la respuesta, respetuosamente, que lea el artículo enlazado hasta el final. artículo
El autor del artículo a partir de 2003 el artículo estaba midiendo en la máquina de doble núcleo y sólo en el primer caso de medición, se mide bloqueo con un solo hilo y el resultado fue de aproximadamente 50 ns por acceso a la cerradura.
No dice nada sobre un bloqueo en el entorno concurrente. Entonces tenemos que seguir leyendo el artículo y en la segunda mitad, el autor estaba midiendo el escenario de bloqueo con dos y tres subprocesos, lo que se acerca a los niveles de concurrencia de los procesadores actuales.
Entonces, el autor dice que con dos subprocesos en Dual Core, las cerraduras cuestan 120ns, y con 3 subprocesos va a 180ns. Por lo tanto, parece depender claramente del número de subprocesos que acceden al bloqueo al mismo tiempo.
Entonces es simple, no es 50 ns a menos que sea un solo hilo, donde el bloqueo se vuelve inútil.
Otro tema a considerar es que se mide como tiempo promedio .
Si se midiera el tiempo de iteraciones, habría tiempos pares entre 1 ms y 20 ms, simplemente porque la mayoría fue rápida, pero pocos subprocesos esperarán el tiempo de los procesadores e incurrirán incluso en retrasos de milisegundos.
Esta es una mala noticia para cualquier tipo de aplicación que requiera un alto rendimiento y baja latencia.
Y el último tema a considerar es que podría haber operaciones más lentas dentro de la cerradura y muy a menudo ese es el caso. Cuanto más tiempo se ejecuta el bloque de código dentro de la cerradura, mayor es la contención y los retrasos aumentan por las nubes.
Tenga en cuenta que ya ha pasado más de una década desde 2003, es decir, pocas generaciones de procesadores diseñados específicamente para funcionar de forma totalmente simultánea y el bloqueo está perjudicando considerablemente su rendimiento.