2014-01-13 2 views
1

멀티 스레딩을 처음 사용했습니다 ... 멀티 스레딩은 성능을 향상시키는 데 사용되지만 프로세서가 이미 단일 스레드에서 가능한 빠른 속도로 작동한다면 어떻게 될 수 있습니까? 멀티 스레딩은 각 작업을 오래 걸리게합니까?

설명합니다 : 단일 스레드 환경의 사용자에서

는 A는 1 초 걸리는 작업을 시작 - 작업 1 초에 완료됩니다. 사용자 B는 동일한 작업을 몇 초 후 시작하고 사용자 A를 기다려야하므로 사용자 B 작업이 거의 2 초 내에 완료됩니다. 자, 이것이 멀티 스레드 환경이라면 두 작업을 모두 실행하지 않아도 2 초가 걸립니다. ... 예 : 작업 A의 일부, 작업 B의 일부, 작업 A의 일부, 작업 B의 일부 ... 결국 두 작업이 약 2 초 내에 완료 될 때까지?

프로세서가 둘 이상인 경우에만 더 빠릅니까? 아니면 큰 작업이 처리되고 작은 작업이이 시간 동안 튀어 나오거나 빠져 나가야 할 때 멀티 스레딩을 예약해야합니까?

+0

멀티 태스킹/멀티 쓰레딩은 가장 일반적으로 좋은 입출력 응답을 제공하는 데 사용됩니다. 이는 여러 개의 코어가있는 시스템에 적용됩니다. –

답변

4

작업이 100 % CPU 바운드이고 하나의 CPU 코어 만있는 경우 멀티 스레딩을 사용하면 작업 속도가 느려집니다. 둘 이상의 CPU 코어가있는 경우 성능을 향상시키기 위해 코어를 보유 할 수있는만큼 많은 스레드를 할당 할 수 있습니다. 작업이 외부 (I/O)와 상호 작용하는 경우 멀티 스레딩은 성능을 한 지점으로 높일 수 있습니다. 하나의 스레드가 입출력이 완료되기를 기다리는 동안 다른 스레드가 CPU 기반 처리를 수행 할 수 있습니다.

고전적인 예는 계산을 수행하고 GUI를 표시하는 프로그램입니다. 하나의 스레드 (이벤트 스레드)에서 GUI를 업데이트하고 다른 "백그라운드"스레드에서 모든 처리를 수행합니다. 이벤트 스레드는 사용자 상호 작용을 처리하지만 아무것도 수행하지 않습니다. 이 작업을 수행하지 않으면 사용자가 요청한 작업에 상당한 시간이 걸릴 때 GUI가 응답을 중지합니다. 이 경우 단일 코어 시스템에서도 멀티 스레드를 실행할 수 있습니다.

응용 프로그램에서 스레드 사용을 조정하는 방법은 많은 요인에 따라 달라지며 전체 교과서를 차지할 수 있습니다.

0

이제 작업 A가 작업을 완료하기 위해 특정 리소스 (예 : 네트워크 파일 또는 사용자 입력)를 필요로한다고 생각하십시오. 이제는 작업 A에 필요한 리소스가 현재 사용 가능하지 않으므로의 스레드에서 다음에 어떤 작업이 수행되는지는 작업 A가 리소스를 사용할 수있을 때까지 대기 할 수 있도록 CPU가 제어한다는 것이고 현재는 입니다. CPU가 유휴 상태 인은 다른 리소스를 기다리는 동안 CPU 시간이 인 중요한 리소스를 낭비한다는 것을 의미합니다. 그러나 작업 A가 다중 스레드 환경에 구현 된 경우 작업 A가 자원을 대기하면 리소스 (작업 A 스레드)가 사용 가능해질 때까지 일시 중단되고 CPU 시간은 다른 작업을 효율적으로 실행할 수 있습니다. 희망이 도움 :

관련 문제