■ Process 클래스 : ProcessAffinity 속성을 사용해 프로세스를 특정 CPU에서만 실행하기

------------------------------------------------------------------------------------------------------------------------

TestSolution.zip


[TestProject 프로젝트]

 

Program.cs

 

 

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

 

 

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

    }

}

 

------------------------------------------------------------------------------------------------------------------------

Posted by 사용자 icodebroker
TAG

댓글을 달아 주세요