preliminares:MySQL: Las transacciones a través de múltiples hilos
Tengo una aplicación que mantiene una agrupación de hebras de alrededor de 100 hilos. Cada hilo puede durar de 1 a 30 segundos antes de que una nueva tarea lo reemplace. Cuando termina un hilo, ese hilo casi siempre dará como resultado la inserción de 1-3 registros en una tabla, esta tabla es utilizada por todos los hilos. En este momento, no existe soporte transaccional, pero estoy tratando de agregar eso ahora. Además, la tabla en cuestión es InnoDB. Así que ...
Meta
Quiero poner en práctica una operación de este. Las reglas para si esta transacción se compromete o revierte residen en el hilo principal. Básicamente hay una función simple que devolverá un valor booleano.
- ¿Puedo implementar una transacción en múltiples conexiones?
- De lo contrario, ¿pueden varios subprocesos compartir la misma conexión? (Nota: hay MUCHAS inserciones aquí, y ese es un requisito).
Tal vez, creo que podría volver a pensar esto simplemente haciendo que el hilo espere en la prueba del hilo principal para completar antes de comprometerse. – Zombies
Solo un pensamiento, no probé eso: si usted hace sus propias funciones 'start_transaction()' y 'commit()'/'rollback()', y bloquea un mutex en 'start_transaction()' y lo desbloquea en la transacción fin, las transacciones serán mucho más seguras para usar en hilos. No digo que funcionará como lo hizo desde una conexión diferente. Es solo que a veces comienzas transacciones en hilos y confías en que son atómicos. También tenga en cuenta que mysql sais que solo una consulta a la vez debería ejecutarse dentro de todos los hilos. Eso incluye desde la ejecución de la consulta hasta completar la obtención del resultado. – NickSoft
La comunicación sobre la conexión debe ser serializada. Un enfoque es tener un hilo de comunicación dedicado y hacer que otros hilos hagan el trabajo que sea necesario, luego pasar los resultados al hilo de comunicación, que serializa los enunciados. –