Windows에서 Perl 스레드를 동시에 실행할 수 있습니까?
-
01-07-2019 - |
문제
Perl 스레드(스레드 사용)를 사용하여 설정하려고 하는 Perl 스크립트가 있습니다.간단한 테스트를 실행하면 모든 것이 작동하지만 실제 스크립트(여러 SQL을 실행하는 스레드가 있음)를 수행하면플러스 세션), 각 SQLPlus 세션은 순서대로 실행됩니다(예: 스레드 1의 sqlplus가 1-5단계를 실행한 다음 스레드 2의 sqlplus가 6-11단계를 실행하는 등).
나는 스레드가 동시 처리를 수행한다는 것을 이해했다고 생각했지만 뭔가 잘못되었습니다.어떤 아이디어가 있습니까? 아니면 다른 Perl 마법을 수행해야 합니까?
해결책
몇 가지 가능한 설명:
이 스크립트를 다중 코어 프로세서 또는 다중 프로세서 시스템에서 실행하고 있습니까?CPU가 하나만 있으면 언제든지 하나의 스레드만 사용할 수 있습니다.
동시에 수행되는 것을 방지하는 1~6단계와 관련된 트랜잭션이나 잠금이 있습니까?
데이터베이스에 대한 여러 연결을 사용하고 있으며 스레드 간에 단일 연결을 공유하지 않고 있습니까?
다른 팁
실제로 스레드가 실행되는 순서를 보장할 방법이 없습니다.따라서 해당 동작(기대한 것과 다르더라도)은 실제로 잘못된 것은 아닙니다.
여기서 어떤 종류의 동기화가 진행되고 있는 것 같습니다.아마도 SQL*Plus 자체를 한 번만 호출해 볼까요?일부 프로그램에서는 그런 일이 발생합니다.
기타 가능성:
스레드 생성 및 프로세스 생성(당신은 ~이다 SQL*Plus에 대한 하위 프로세스를 생성하는 것은 스레드를 실행하는 것보다 오래 걸리므로 스레드 2가 시작되기도 전에 스레드 1이 완료됩니다.
데이터베이스 업데이트를 강제로 동기화하는 SQL 스크립트의 트랜잭션을 사용하고 있습니다.
데이터베이스 설정을 확인하세요.보수적으로 구성되어 있음을 알 수 있습니다.이로 인해 사소한 읽기라도 해당 정보에 대한 모든 액세스가 차단됩니다.
전화해야 할 수도 있습니다. threads::yield
.