2009-04-04 3 views
3

나는 멀티 코어 CPU를 가지고 있지만 .net 응용 프로그램은 코어 중 하나만 사용합니다. 옵션을 사용할 수있을 때 어떻게 하나 이상의 코어를 사용할 수 있습니까?.net 응용 프로그램 멀티 스레딩

답변

7

이것은 무료로 발생하지 않습니다. 다중 코어를 사용하려면 다중 스레드를 사용해야합니다. 여러 코어를 동시에 사용하려면 프로그램에 스레딩 지원을 명시 적으로 추가해야합니다.

다음은 작업 병렬 라이브러리 (parallel extensions framework라고도 함)를 사용하여 관리되는 코드로 여러 코어를 활용하는 방법을 설명하는 훌륭한 기사입니다.

http://msdn.microsoft.com/en-us/magazine/cc163340.aspx

4

당신은 JaredPar 언급으로 Microsoft Parallel Extensions to .NET Framework 3.5을 시도하거나 직접 프로그램의 멀티 스레드 버전을 만들 수 있습니다.

"for-loop"를 기존 프로그램에서 Parallel Extension의 System.Threading.Parallel로 변환하는 것이 얼마나 쉬운 지에 대한보다 구체적인 예를 여기에 추가하고 싶습니다. 들어에 대한 루프 maxnum 0 사이의 모든 소수를 확인 :

System.Threading.Parallel.For(0, maxNum + 1, x => IsPrime(x)); 

쉬운, 그렇지?

또한 System.Parallel에서 얻은 성능 향상에 대한 간단한 벤치 마크를 수행합니다. 나는 나의 동료 here에 대한 링크를 게시하면 다른 동료들도 신경 쓰지 않기를 바랍니다.

alt text

0

는 @JaredPar는 excellent answer 제공합니다. 그러나 어떤 경우에는 코드를 멀티 쓰레드로 다시 작성할 필요가 없습니다. 다중 스레드 코드는 더 복잡하고 다양한 유형의 버그를 추가합니다.

그러나 데스크탑 응용 프로그램의 간단한 경우에는 운영 체제가 다른 응용 프로그램의 화면을 다시 그리는 것과 같은 작업을 수행 할 수 있도록 듀얼 코어 컴퓨터의 두 번째 코어를 비울 때가 있습니다. 바이러스 스캐너 등등.

당신이 특히 듣고 싶었던 대답은 아니지만 특정 경우에는 실용적인 답변이었습니다.

0

시간 집약적 인 작업을 여러 스레드에 보냅니다.

multitrheading을위한 제안 된 방법은 ThreadPool을 사용하는 것입니다.

MSDN에서 ThreadPool이의 샘플 :

using System; 
using System.Threading; 
public class Example { 
    public static void Main() { 

     // Queue the task. 
     ThreadPool.QueueUserWorkItem(new WaitCallback(ThreadProc)); 

     Thread.Sleep(1000); 

     Console.WriteLine("Main thread exits."); 
    } 

    // This thread procedure performs the task. 
    static void ThreadProc(Object stateInfo) { 

     // No state object was passed to QueueUserWorkItem, so 
     // stateInfo is null. 
     Console.WriteLine("Hello from the thread pool."); 
    } 
}