■ Process 클래스의 ProcessAffinity 속성을 사용해 프로세스를 특정 CPU에서만 실행하는 방법을 보여준다.
[TestProject 프로젝트]
▶ Program.cs
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 |
using System; using System.Diagnostics; namespace TestProject { /// <summary> /// 프로그램 /// </summary> class Program { //////////////////////////////////////////////////////////////////////////////////////////////////// Method ////////////////////////////////////////////////////////////////////////////////////////// Static //////////////////////////////////////////////////////////////////////////////// Private #region 프로세스 구하기 - GetProcess() /// <summary> /// 프로세스 구하기 /// </summary> /// <returns>프로세스</returns> private static Process GetProcess() { Process process = new Process(); process.EnableRaisingEvents = false; process.StartInfo.FileName = "TestWorker.exe"; process.StartInfo.WindowStyle = ProcessWindowStyle.Hidden; return process; } #endregion #region 프로그램 시작하기 - Main() /// <summary> /// 프로그램 시작하기 /// </summary> private static void Main() { Process process = GetProcess(); Console.WriteLine("작업자 프로세스를 시작하려면 아무 키나 눌러 주시기 바랍니다."); process = GetProcess(); Console.ReadKey(false); process.Start(); Console.WriteLine("작업자 프로세스를 시작했습니다."); process.ProcessorAffinity = (IntPtr)0x88; // 4번, 8번 CPU에 할당한다. Console.WriteLine("작업자 프로세스를 시작했습니다."); Console.WriteLine("작업자 프로세스를 종료 하려면 아무 키나 눌러 주시기 바랍니다."); Console.ReadKey(false); process.Kill(); Console.WriteLine("작업자 프로세스를 제거했습니다."); } #endregion } } |
[TestWorker 프로젝트]
▶ Program.cs
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 |
using System; using System.Threading; namespace TestWorker { /// <summary> /// 프로그램 /// </summary> class Program { //////////////////////////////////////////////////////////////////////////////////////////////////// Field ////////////////////////////////////////////////////////////////////////////////////////// Static //////////////////////////////////////////////////////////////////////////////// Private #region Field /// <summary> /// 난수기 /// </summary> private static Random _random = new Random(); #endregion //////////////////////////////////////////////////////////////////////////////////////////////////// Method ////////////////////////////////////////////////////////////////////////////////////////// Static //////////////////////////////////////////////////////////////////////////////// Private #region 스레드 처리하기 - ProcessThread() /// <summary> /// 스레드 처리하기 /// </summary> public static void ProcessThread() { long number = 0; while(true) { number += _random.Next(100, 1000); if(number > 1000000) { number = 0; } } } #endregion #region 프로그램 시작하기 - Main() /// <summary> /// 프로그램 시작하기 /// </summary> private static void Main() { int processorCount = Environment.ProcessorCount; for(int i = 0; i < processorCount; i++) { Thread thread = new Thread(() => { ProcessThread(); }); thread.Start(); } } #endregion } } |