2007/07/30 21:41
C# on multicore processor (or multi processor) - 멀티 프로세싱을 위한 C#
2007/07/30 21:41 in Programming/.NET

c#에선 단순히 스레드만 여러개 만든다고 멀티 프로세싱이 되진 않는다. 스레드가 어느 프로세서에서 실행될 수 있는지를 지정해줘야 한다.
public static void ThreadProc(object threadId)
{
int id = (int)threadId;
while(true)
{
int sum = 0;
for (int i = 0; i < 1000000; i++)
{
sum += i;
}
Console.Out.Write(string.Format("{0} ", id));
}
}
static void Main(string[] args)
{
const int NumOfThread = 4;
Thread[] threads = new Thread[NumOfThread];
for (int i = 0; i < NumOfThread; i++)
{
threads[i] = new Thread(ThreadProc);
threads[i].Start(i);
}
Process currentProcess = Process.GetCurrentProcess();
foreach (ProcessThread processThread in currentProcess.Threads)
{
processThread.ProcessorAffinity = currentProcess.ProcessorAffinity;
}
for (int i = 0; i < NumOfThread; i++)
{
threads[i].Join();
}
}
currentProcess.ProcessorAffinity는 현재 프로세스가 실행될 수 있는 프로세서에 대한 비트마스크이다. 예를들어 프로세서가 4개라면 프로그램은 프로세서1부터 4까지 프로세서 중 하나에서 실행될 수 있다. 이 비트마스크를 10진수로 표현하면 15이다.
반면 processThread.ProcessorAffinity는 기본적으로 해당 프로세스가 돌아가는 프로세서 내에서만 동작할 수 있게 되어있다. 이 값을 모든 프로세서안에서 실행될 수 있게 바꿔주는 것이다.'Programming > .NET' 카테고리의 다른 글
| URL 상대 경로, 절대 경로 변환 클래스 (C#) (0) | 2008/03/13 |
|---|---|
| C#으로 익스플로러 툴바 및 BHO만들기 (10) | 2007/11/07 |
| C#에서 unmanaged 함수 호출하기. (0) | 2007/08/31 |
| .NET 2.0 C#의 Configuration Manager (0) | 2007/08/30 |
| C# on multicore processor (or multi processor) - 멀티 프로세싱을 위한 C# (0) | 2007/07/30 |


Prev
Rss Feed