Pregunta

Estoy pensando aquí: Si tiene 2 hilos que ejecutan operaciones rápidas que deben sincronizarse, ¡no es un enfoque que no se puede bloquear más rápido / mejor que un enfoque de interruptor de bloqueo / contexto?

por no bloqueo me refiero a algo como:

mientras (verdadero) { Si (checkandgettthelock ()) se rompe; }

Lo único que puedo pensar es la inanición (con la CPU quemadura) si tiene demasiados hilos en bucle alrededor de la cerradura.

¿Cómo equilibro un enfoque frente al otro?

¿Fue útil?

Solución

Esto es lo que dice la concurrencia de Java en la práctica sobre el tema:

El JVM puede implementar el bloqueo ya sea a través de la espera (repetidamente tratando de adquirir la cerradura hasta que tenga éxito) o por el suplemento de la Hilo bloqueado a través del sistema operativo. Que es más eficiente Depende de la relación entre el interruptor de contexto por encima de la cabeza y el Tiempo hasta que la cerradura esté disponible; la espera es preferible para Las esperas y la suspensión cortas son preferibles para largas esperas. Algunos jvms Elija entre los dos de manera adaptativa según los datos de perfiles de la espera anterior veces, pero la mayoría simplemente suspende hilos esperando una cerradura.

y también (que es, imo, el punto más importante):

No se preocupe excesivamente sobre el costo de la sincronización incontenida. El mecanismo básico ya es bastante rápido, y JVMS puede realizar Optimizaciones adicionales que reducen o eliminan aún más el costo. En cambio, enfoque los esfuerzos de optimización en áreas donde la contención de bloqueo. en realidad ocurre.

Otros consejos

Bueno, la única forma de estar seguro es la prueba.Cuando se trata de multithreaduras y rendimiento, simplemente no puedes asumir.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top