Es bastante sencillo. Los bloqueos de lectura también se conocen como bloqueos compartidos porque más de un proceso puede leer al mismo tiempo. El objetivo de un bloqueo de lectura es evitar la adquisición por otro proceso de un bloqueo de escritura. Por el contrario, un bloqueo de escritura inhibe todas las demás operaciones mientras se completa una operación de escritura, por lo que se describe como exclusivo.
Por lo que un bloqueo de lectura dice "puede leer ahora pero si desea escribir tendrá que esperar", mientras que un bloqueo de escritura dice "tendrá que esperar".
Me doy cuenta de que está investigando en apoyo de sus estudios, pero no puedo resistir la tentación de dar una conferencia.
El uso incompetente del bloqueo es una causa principal de dolores de cabeza de rendimiento. El uso de un sistema de bloqueo que diferencie las cerraduras de lectura y escritura es un buen comienzo, pero un diseño cuidadoso a veces puede eliminar gran parte de la necesidad de bloqueo. Por ejemplo, el estado de la sesión debe nunca mantenerse en una colección global por elemento de estado.
De hecho, he visto esto hecho. Es un diseño atroz, que causa el boxeo y un cambio en una colección para cada cambio en el estado de la sesión, lo que implica un bloqueo de escritura prolongado. Los gastos generales fueron paralizantes, reduciendo de forma efectiva el comportamiento del servidor a un solo subproceso.
Simplemente agregando todo el estado de la sesión en una estructura fue una gran mejora. Los cambios en el estado de la sesión simplemente cambiaron los valores de los miembros de la estructura de estado de una sesión. Como ninguna otra sesión tenía la oportunidad o la oportunidad de hacer referencia directa al estado de una sesión, la única colección que se actualizaba era la lista de sesiones. Como resultado, el bloqueo era completamente innecesario durante un sesssion, sólo al principio y al final, y el rendimiento aumentó en un factor de 3000.
El otro escenario de bloqueo común se comparte recursos entre los hilos de una aplicación de usuario. La mayoría de los marcos modernos abordan esto usando mensajes en lugar de bloqueos; cuando "realiza la transición al subproceso de IU", en realidad está haciendo cola con un mensaje que contiene un puntero de función y algunos parámetros (o un delegado y un marco de pila según la implementación).
Gran analogía capturando la abstracción muy de cerca (¡las analogías que no sobrepasan son raras!). ¡Gracias! –
muy buena explicación. Sin embargo, el PO preguntó sobre el * origen * de las denominaciones "compartidas" y "exclusivas", no a una explicación de las termias per se. – serhio
¿Por qué gente como ArjunShankar no escribe libros? Una explicación muy interesante y comprensible. – user3388473