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
'VisualStudio > C#서버' 카테고리의 다른 글
[C#서버][개념] 임계영역 Spin락(스핀락(SpinLock)) (0) | 2022.10.26 |
---|---|
[C#서버][개념] 임계영역(크리티컬섹션)원자성 - 레이스컨디션(Race Condition)과 Interlocked (0) | 2022.10.26 |
[C#서버][개념] 메모리 베리어( Memory Barrier) (0) | 2022.10.26 |
[C#서버][개념] volatile을 사용해 어셈블리 최적화 막기 (0) | 2022.10.26 |
[C#서버][기초] Thread & ThreadPool & Task (0) | 2022.10.26 |