2009-05-08 4 views

답변

7

스레드를 지원하는 모든 언어와 런타임은 하이퍼 스레딩을 지원합니다.

하이퍼 스레딩은 여러 스레드간에 CPU를 멀티플렉싱하는 방식으로 실제 CPU는 하나이지만 두 CPU로 운영 체제에서 볼 수 있으므로 두 스레드를 스케줄링 할 수 있습니다. 하나의 스레드 (메모리 대기, 긴 FPU 연산 등)에서 CPU의 스톨은 CPU가 다른 스레드의 코드를 실행할 수있게합니다.

하이퍼 스레딩에 대한 자세한 내용은 Wikipedia입니다.

+0

사실 더 세밀합니다. 다른 계산 단위 (산술, 부동 소수점)는 다른 스레드의 명령어 결과를 동시에 계산할 수 있습니다. –

+0

그래 ... 더 완전한 대답은 순서가 잘못된 실행과 파이프 라인 마구간의 맥락에서 이것을 줄 것이지만 나는 헤세이와 패터슨의 700 페이지를 대답으로 압축하고 싶지 않았다. :) – Michael

+0

사실, 나는 Atom이 in-order 부분이기 때문에 Atom의 경우 동시에 다른 계산 단위가 가능한지 확실하지 않습니다. – Michael

0

하이퍼 스레딩은 대부분 시스템에서 더 많은 프로세서를 갖는 것과 같습니다. 사용자 언어가 스레드를 지원하지 않더라도 프로그램이 다른 사본을 생성하거나 (운영 체제에서 지원하는 경우) 사용 가능한 프로세서와 균형을 유지할 수있는 작업자 프로세스를 생성 할 수 있습니다.

해당 언어에 대한 스레드 지원을 찾아야하지만 스레드가 프로그램을 쉽게 복잡하게 만들 수 있으며 코드가 비동기 적으로 실행될 수 있으므로 버그를 찾기가 어려울 수 있습니다.

귀하의 질문에 대한 답변은 '아마도,하지만 이에 따라 다릅니다.'입니다.

다른 질문에 대해서는 런타임 및 컴파일러 지원에 따라 C에서 여러 스레드를 쉽게 구현할 수 있습니다. 예를 들어 OpenMP 확장자 http://en.wikipedia.org/wiki/OpenMP이 유용 할 수 있습니다.