나는 약간의 연구를 해왔고 이런 상황이 발생했습니다. STDOUT (화면)에 쓰려면 간단한 단일 스레드 스크립트보다 빠르게 데이터를 인쇄하는 다중 스레드 스크립트를 수행 할 수 없습니다.STDOUT (화면)과 일반 파일을 사용한 성능
myPrinter.perl > myPrint
결과 변화와 당신은 멀티 스레드 방식이 더 좋은 시간을 가져옵니다 것을 볼 수 있습니다, 당신은이 같은 파일에 기록합니다. STDOUT (화면) 또는 출력 파일이 둘 다 공유 된 자원이므로 액세스 시간이 비슷하지 않을까? 왜 멀티 스레드 접근 방식은 더 나은 파일 쓰기 기능을 수행합니까?
내가 실험에 사용되는 펄 스크립트은 다음과 같습니다
단일 스레드
for my $i (1..100000000){
print("things\n");
}
멀티 스레드
use threads;
use Thread::Queue 3.01 qw();
use constant NUM_WORKERS => 4;
sub worker {
for my $i (1 .. 25000000){
print("things\n");
}
}
my $q = Thread::Queue->new(); #::any
async { while (defined(my $job = $q->dequeue())) { worker($job); } }
for 1..NUM_WORKERS;
for my $i (1 .. 4){
$q->enqueue($i);
}
$q->end();
$_->join for threads->list;
크레딧 : 큐 구현이 찍은 ...에서 ikegami 중 하나입니다.
[버퍼링에 어려움이 있습니까?] (http://perl.plover.com/FAQs/Buffering.html) – ThisSuitIsBlackNot
"_to the STDOUT_"은 (는) 실제로 화면에 출력하는 것을 의미합니까? 더 오래 걸릴 것입니다. 모든 렌더링, 다시 그리기 및 기타 등등. 시간은 단일 스레드, 화면 대 리디렉션. 멀티 스레드에 어떤 영향을 미치는지는 모르지만 제 추측에 따르면 더 나쁠 수 있습니다. 또한 ThisSuitIsBlack은 버퍼링이 다를 수 있다고 말합니다. – zdim