Question

Je tente de configurer un script Perl à l'aide de threads Perl (utilisez des threads). Lorsque j'exécute des tests simples, tout fonctionne, mais lorsque je fais mon script (qui a les threads exécutant plusieurs sessions SQL Plus), chaque session SQL Plus s'exécute dans l'ordre (c'est-à-dire que sqlplus du thread 1 exécute les étapes 1 -5, puis enfilez sqlplus 2 en exécutant les étapes 6 à 11, etc.).

Je pensais avoir compris que les threads effectueraient un traitement simultané, mais quelque chose ne va pas. Avez-vous des idées ou devrais-je utiliser une autre magie Perl?

Était-ce utile?

La solution

Quelques explications possibles:

  1. Exécutez-vous ce script sur un processeur multi-core ou multi-processeurs? Si vous n'avez qu'un seul processeur, un seul thread peut l'utiliser à tout moment.

  2. Les étapes 1 à 6 impliquent-elles des transactions ou des verrous empêchant leur exécution simultanée?

  3. Êtes-vous certain d’utiliser plusieurs connexions à la base de données et de ne pas en partager une seule entre les threads?

Autres conseils

En fait, vous n'avez aucun moyen de garantir l'ordre d'exécution des threads. Donc, le comportement (si ce n’est pas ce que vous attendez) n’est pas vraiment faux.

Je suppose que vous avez une sorte de synchronisation en cours ici. Peut-être que SQL * Plus ne s'appelle qu'une seule fois? Certains programmes le font ...

Autres possibilités:

  • la création de threads et la création de processus (vous créez des sous-processus pour SQL * Plus, n'est-ce pas?) prennent plus de temps que d'exécuter le thread; le thread 1 est donc terminé avant le thread 2 même commence

  • Vous utilisez dans vos scripts SQL des transactions qui imposent la synchronisation des mises à jour de la base de données.

Vérifiez les paramètres de votre base de données. Vous constaterez peut-être qu'il est configuré de manière conservatrice. Cela empêcherait même les lectures mineures de bloquer tout accès à ces informations.

Vous devrez peut-être aussi appeler threads :: yield .

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top