나는이 질문이 다소 오래되었다는 것을 알고 있지만, 2009 년 이후로 상황이 발전했습니다.
이제 고려해야 할 두 가지가 있습니다 : 코어 수와 각 코어 내에서 실행할 수있는 스레드 수.
Intel 프로세서의 경우 스레드 수는 하이퍼 스레딩으로 정의되며 2 (사용 가능한 경우)입니다. 그러나 하이퍼 스레딩은 2 개의 스레드를 사용하지 않더라도 실행 시간을 2로 줄입니다. (즉, 두 프로세스간에 공유되는 1 개의 파이프 라인-프로세스가 많을수록 좋습니다. 그렇지 않은 경우에는 더 좋습니다. 코어가 많을수록 더 좋습니다!)
다른 프로세서에는 2, 4 또는 8 개의 스레드가있을 수 있습니다. 따라서 각각 8 개의 스레드를 지원하는 8 개의 코어가있는 경우 컨텍스트 전환없이 64 개의 프로세스를 병렬로 실행할 수 있습니다.
표준 운영 체제를 사용하여 제어 할 수없는 다른 모든 종류의 상황에 대한 컨텍스트 전환을 수행하는 경우 "컨텍스트 전환 없음"은 사실이 아닙니다. 그러나 이것이 주요 아이디어입니다. 일부 OS에서는 프로세서를 할당 할 수 있으므로 응용 프로그램 만 해당 프로세서에 액세스 / 사용할 수 있습니다!
내 경험상 I / O가 많으면 여러 스레드가 좋습니다. 메모리를 많이 사용하는 작업 (소스 1 읽기, 소스 2 읽기, 빠른 계산, 쓰기)이 많은 경우 더 많은 스레드가 도움이되지 않습니다. 다시 말하지만, 이는 동시에 읽고 쓰는 데이터의 양에 달려 있습니다 (즉, SSE 4.2를 사용하고 256 비트 값을 읽는 경우 해당 단계에서 모든 스레드를 중지시키는 것입니다. 즉, 1 스레드는 구현하기가 훨씬 쉬울 것입니다. 프로세스 및 메모리 아키텍처에 따라 달라지며, 일부 고급 서버는 별도의 코어에 대해 별도의 메모리 범위를 관리하므로 데이터가 올바르게 제출되었다고 가정하면 별도의 스레드가 더 빨라집니다. 아키텍처에서는 4 개의 프로세스가 4 개의 스레드로 1 개의 프로세스보다 빠르게 실행됩니다.)