En realidad, hay una pequeña posibilidad de una condición de carrera en un sitio de subastas a menos que realmente esté programando mal. Me pregunto si te equivocas en cuanto a qué condición de carrera es. No tiene nada que ver con el hecho de que las personas están “compitiendo” para obtener la última oferta.
Por ejemplo, la manera más fácil de garantizar que no haya condiciones de carrera sería crear un registro separado para cada oferta. Así es como la mayoría de la gente pensaría hacerlo de todos modos. Incluso en un nivel de actividad de eBay, esto no crearía suficientes datos para abrumar al servidor de la base de datos, y siempre podría eliminar las ofertas antiguas si fuera necesario.
Una condición de carrera ocurre cuando dos procesos intentan actualizar el mismo dato. Es por eso que, si tiene registros separados para cada oferta, nunca podría tener una condición de carrera, a menos que una persona intentara actualizar su información de perfil o detalles de la subasta, y por alguna razón intentara hacerlo en dos computadoras diferentes al mismo tiempo vez, presione el botón de enviar exactamente al mismo tiempo, e incluso entonces, tendría que tener un momento increíblemente desafortunado. E incluso si sucedieran todas esas cosas desafortunadas, una condición de carrera probablemente ni siquiera resultaría en que ocurriera algo malo.
- Cómo agregar espacios en blanco adicionales en PHP
- Estoy desarrollando un sitio web para un cliente. ¿Cómo lo creo sin un dominio?
- Todavía no he trabajado en Javascript, pero sé algunas cosas básicas en Javascript. Me gustaría aprender React JS, ¿puedo?
- Estoy usando el editor de texto Brackets para crear un sitio web, sin embargo, mi código PHP no se ejecuta cuando ejecuto el sitio web en mi navegador; que pasa
- He visto a muchos programadores hablar sobre la próxima insignificancia que tendrá JavaScript en el futuro con respecto al desarrollo web. ¿Qué tan cierto es esto teniendo en cuenta las documentaciones, la comunidad y los marcos que tiene JavaScript?
Así es como ocurre una verdadera condición de carrera y por qué puede ser mala:
Digamos que está creando un sitio de comercio electrónico pesado y, en particular, desea realizar un seguimiento de los niveles de existencias. Como cada artículo en su tienda es un registro, usted decide agregar un campo a ese registro de artículo llamado NumberInInventory. Entonces, alguien pone un registro de Widgets y dice que tenemos 10 en stock. Cada vez que se compra un widget, primero consulta el registro para averiguar cuál es NumberInInventory, resta uno y escribe ese nuevo número en el campo NumberInInventory. El problema surge cuando te quedan 2 existencias y dos personas deciden comprar una exactamente al mismo tiempo (por ejemplo, en milisegundos entre sí). La persona A presiona Comprar, la computadora lee el campo NumberInInventory y obtiene 2. Luego, antes de que la computadora pueda restar 2–1 (pista, eso es bastante rápido), la Persona B presiona Comprar y la computadora, en un hilo diferente, lee el campo NumberInInventory y obtiene 2. Luego el hilo de la Persona A resta 2-1 y obtiene 1, que luego escribe en el campo NumberInInventory. Luego, el hilo de la Persona B resta 2-1 y obtiene 1, que luego escribe en el campo NumberInInventory.
Por lo tanto, a pesar de que tenía un inventario de 2 y dos personas cada uno compró uno, la base de datos todavía cree que tiene uno en el inventario, e intentará venderlo, lo que obviamente puede causar algunos problemas.
Pero el punto es que esto solo puede suceder cuando ambos intentan actualizar el mismo dato y cuando también intentan actualizarlo con un valor que depende de un estado anterior de esos datos. Si dos personas intentaran actualizar el nombre del elemento, por ejemplo, no podría existir una condición de carrera.
Técnicamente, también puede obtener condiciones de carrera actualizando campos separados en el mismo registro al mismo tiempo, solo en función de cómo funciona el funcionamiento interno de la base de datos, pero de nuevo, todo esto se mitiga simplemente usando registros separados y en línea sitio de subastas, no hay una razón real para no hacerlo.