Pregunta

Tengo un script Perl que estoy intentando configurar usando Perl Threads (usar subprocesos).Cuando ejecuto pruebas simples, todo funciona, pero cuando hago mi script real (que tiene los subprocesos ejecutando múltiples SQLPlus sesiones), cada SQLLa sesión Plus se ejecuta en orden (es decir, sqlplus del subproceso 1 ejecuta los pasos 1 a 5, luego sqlplus del subproceso 2 ejecuta los pasos 6 a 11, etc.).

Pensé que entendía que los subprocesos realizarían procesamiento simultáneo, pero algo anda mal.¿Alguna idea o debería hacer alguna otra magia de Perl?

¿Fue útil?

Solución

Algunas posibles explicaciones:

  1. ¿Está ejecutando este script en un procesador multinúcleo o en una máquina multiprocesador?Si solo tiene una CPU, solo un subproceso puede usarla en cualquier momento.

  2. ¿Hay transacciones o bloqueos relacionados con los pasos 1 a 6 que impedirían que se realicen al mismo tiempo?

  3. ¿Está seguro de que está utilizando varias conexiones a la base de datos y no comparte ninguna entre subprocesos?

Otros consejos

En realidad, no hay forma de garantizar en qué orden se ejecutarán los subprocesos.Entonces el comportamiento (si no es el esperado) no es realmente malo.

Sospecho que hay algún tipo de sincronización aquí.¿Posiblemente SQL*Plus solo se pueda llamar una vez?Algunos programas hacen eso...

Otras posibilidades:

  • creación de hilos y creación de procesos (usted son crear subprocesos para SQL*Plus, ¿no es así?) lleva más tiempo que ejecutar el subproceso, por lo que el subproceso 1 finaliza incluso antes de que comience el subproceso 2.

  • Está utilizando transacciones en sus scripts SQL que fuerzan la sincronización de las actualizaciones de la base de datos.

Verifique la configuración de su base de datos.Es posible que descubra que está configurado de forma conservadora.Eso provocaría que incluso lecturas menores bloqueen todo acceso a esa información.

Es posible que también necesites llamar threads::yield.

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