VisualStudio/C#서버

[C#서버][기초] Thread 테스트 방법

usingsystem 2022. 10. 26. 10:06
728x90

스레드 검색 방법 

일시정지 - 스레드 창에서 스레드 선택

Thread

※아래와 같은 방법으로 Thread를 직접 만들어 사용할 경우 만든 개발자가 끝까지 책임져야하는 스레드이다. (어떤 일을 할 때 마다 정직원을 고용하는 개념) 성능에 많은 부하가 갈 수 있다.

 

IsBackground - True를 선택할 경우 메인스레드가 종료되면 함께 종료된다. (선택해줘야함)

 

Join - 현재 새로 만든 스레드가 종료될 때까지 아래 메인스레드는 실행 할 수 없다.

 

ThreadPool

이미 만들어진 스레드를 잠깐 사용하는 용도로 부하가 적다.(새롭게 고용하는 직원이아닌 고용된 직원을 유동적으로 사용하는 개념, Unity의 오브젝트 풀과 같은 개념이다.) 

 

스레드 풀을 사용할 때는 짧게 사용하는 곳에서 사용해야 용의하다.(무한으로 실행할 경우 영영 안돌아 올 수 있음)

 

IsBackground - (기본 True상태)

 

 static void MainThread(object state)
        {
            for (int i = 0; i < 5; i++)
               Console.WriteLine("안녕");
        }

        static void Main(string[] args)
        {
            ThreadPool.QueueUserWorkItem(MainThread);

            while (true)
            {
            }
        }

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

ThreadPool.SetMinThreads(1, 1); - 스레드풀 최소 값
ThreadPool.SetMaxThreads(5, 5); - 스레드풀 최대 값

 

아래 for문에서 무한 루프를 도는 ThreadPool 5개를 선언 했기때문에  for문 아래 ThreadPool은 실행되지 않는다.

결국 무한루프에서 사용을 잘 못 하게되면 코드가 멈출 수 있다.

  ThreadPool.SetMinThreads(1, 1);
            ThreadPool.SetMaxThreads(5, 5);

            for (int i = 0; i < 5; i++)
            {
                ThreadPool.QueueUserWorkItem((obj) => { while (true) { } });
            }

            ThreadPool.QueueUserWorkItem(MainThread);
728x90