2013-03-08 2 views
4

멀티 스레딩이 성능을 향상시킬 수있는 방법에 대해 모든 사람들이 이야기하는 것을 들었습니다. 나는 실종 된 것이 없으면 이것을 믿지 않는다. 100 개의 요소가 배열되어 있고 가로 지르는 경우 6 초가 걸립니다. 두 스레드 사이에서 작업을 나눌 때 프로세서는 동시에 작동하지만 속도가 절반 인 경우를 제외하고는 동일한 작업량과 시간을 거쳐야합니다. 멀티 스레딩으로 인해 속도가 느려지면 안됩니까? 작업을 나누기위한 추가 지침이 필요하십니까?멀티 스레딩이 성능을 향상합니까? 방법?

+3

다음을보십시오. http://stackoverflow.com/questions/2856239/will-multi-threading-increase-the-speed-of-calculation-on-single-processor – Chris

+0

4 개의 프로세서가있는 경우 예 (스마트 폰에서도 매우 일반적입니다), 프로그램에는 하나의 스레드 만 있고 사용 가능한 CPU 리소스의 25 % 만 액세스 할 수 있습니다. 프로세서가 하나뿐이라도 효과는 없습니다. – assylias

+0

하나의 단일 스레드 프로그램이 모든 코어를 사용할 수 없습니까? – Valentin

답변

11

100 개 요소를 반복하는 간단한 작업의 경우 멀티 스레딩 작업을 수행해도 성능상의 이점이 없습니다.

요소를 1000 억 개 이상 반복하고 각 요소를 처리하면 추가 CPU를 사용하면 처리 시간이 단축 될 수 있습니다. 그리고 더 복잡한 작업은 예를 들어 I/O로 인한 인터럽트를 일으킬 수 있습니다. 하나의 쓰레드가 I/O를 완료하기 위해 주변기기를 기다리는 동안 잠자고있을 때 (예를 들어, 디스크 쓰기 또는 키보드로부터의 키 누름), 다른 쓰레드는 작업을 계속할 수있다.

+0

+1 I/O 성능을 언급하기 위해 - 선점 형 mutitasker가 처음으로 만들어진 주된 이유. –

+0

많은 데스크탑 장치는 다중 스레드 사용을 지원하지 않습니다. 예를 들어 더 나은 디스크에는 읽기 및 쓰기 용으로 두 개의 비 차단 채널이 있습니다. 즉, 한 스레드 만 효과적으로 한 번에 쓸 수 있음을 의미합니다. 서버 하드웨어에는 여러 채널이있을 수 있습니다. 단일 디스크에는 SATA 연결이 거의 없거나 RAID에 사용할 수 있습니다. 이 경우 여러 스레드가 더 효과적입니다. –

3

프로세서에 코어가 두 개 이상있는 CPU 바운드 작업의 경우 각 프로세서 코어에서 작업을 나눌 수 있습니다. 코어가 두 개인 경우 두 스레드로 작업을 분할하십시오. 이런 식으로 풀 스피드로 작업해야합니다. 그러나 스레드는 실제로 작성하는 데 비용이 많이 들기 때문에 스레드를 작성하는 초기 비용을 극복하기 위해서는 상당한 작업량이 필요합니다.

대화 형 응용 프로그램에서 나타나는 성능 (또는 응답 성)을 개선하기 위해 스레드를 사용할 수도 있습니다. UI 상호 작용을 차단하지 않도록 백그라운드 스레드에서 무거운 계산을 실행합니다. 계산이 더 빨리 완료되지는 않지만 응용 프로그램에 느려지고 응답하지 않는 "멈춤"이 없습니다.