Pregunta

He utilizado una versión de doble comprobación de bloqueo en mi aplicación CF (antes de saber qué fue de bloqueo doble comprobación).

Esencialmente, puedo comprobar por la existencia de un objeto. Si no está presente, he cerrado (por lo general el uso de un nombre de bloqueo) y antes de tratar de crear el objeto puedo comprobar si hay existencia de nuevo. Pensé que esto era una clara forma de dejar de varios objetos que se crean y detener bloqueo excesivo en el sistema.

Esto parece funcionar, en la que no hay duplicados de bloqueo y objetos excesivos no se crean. Sin embargo, he aprendido recientemente que doble comprobación de bloqueo de trabajo en dosn't java , lo que no sé es si esto es cierto en la FQ, ya que las discusiones CF y cerraduras no del todo son las mismas que las hebras Java nativas y cerraduras.

No hay solución correcta

Otros consejos

Para añadir a lo que dijo Ben condenación sobre Java, esto es una práctica bastante común en ColdFusion, específicamente con una rutina de inicialización de la aplicación donde se configura sus variables de aplicación.

Sin tener al menos una cerradura, que está dejando a los éxitos iniciales de su aplicación web inicialización total las variables de aplicación al mismo tiempo. Esto supone que su aplicación es lo suficientemente ocupado como para justificar esto. El peligro está ahí sólo si su aplicación está ocupada en el momento de su aplicación es la primera iniciando.

El primer bloqueo se asegura solamente una solicitud a la vez inicializa las variables.

La segunda cerradura, incrustado dentro de la primera, se compruebe que una variable definida en el extremo de su código de inicialización existe, como application.started. Si existe, el usuario es expulsado.

El patrón de doble bloqueo ha salvado la piel en los sitios ocupados, sin embargo, con sitios muy ocupado, la cola de solicitudes de golpe inicial de la aplicación para completar puede subir demasiado alto, demasiado rápido, y hacer que el servidor se bloquee. La idea es, las solicitudes están esperando el primer golpe, que es lento, entonces el segundo se rompe en la primera cflock, y es rechazada rápidamente. Con cientos o miles de peticiones en la cola, que crecen cada milisegundo, todos ellos están canalizando hacia el primer bloque cflock. La solución es establecer un tiempo de espera muy bajo en el primer cflock y no tirar (o coger y pato) el error de tiempo de espera de bloqueo.

Como nota final, este comportamiento que he descrito ya no se utiliza con el método de ColdFusion 7 onApplicationStart () de su Application.cfc. Si está utilizando onApplicationStart (), entonces no debería estar bloqueando a todos por su rutina de aplicación init. Application.cfc está bien ya bloqueado.

Para concluir, sí, una doble comprobación de obras en ColdFusion bloqueo. Es útil en unos pocos ciertas circunstancias, pero hacerlo bien. No sé los esquemas de por qué funciona tan opuesta a modelo de hilos de Java, lo más probable es que está comprobando manualmente una especie de tabla de consulta en el fondo de su servidor ColdFusion.

Java es multi-hilo, por lo que no es tanto que las cerraduras no funcionan como que no son necesarias. Básicamente, en la FQ 6+, se necesitan cerraduras para prevenir condiciones de carrera o la creación / althering objetos que existen fuera del control de Java (archivos, por ejemplo).

Para abrir un conjunto la otra lata de gusanos ...

¿Por qué no utilizar una biblioteca de inyección de dependencias, tales como Coldspring, para realizar un seguimiento de los objetos y evitar dependencias circulares.

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