본문 바로가기
Programing_Language/C#

[쓰레드] 쓰레드풀(ThreadPool)

by neohtux 2020. 7. 17.
728x90

쓰레드 풀 (ThreadPool)

- 쓰레드 임시 대기소같은 개념이다. 관리 되어야하는 작업들이 끝나면
해당 쓰레드를 삭제하지 않고 쓰레드풀에서 임시 대기 시켰다가 다시 필요하면 사용할 수 있다.

 

public static bool QueueUserWorkItem(WaitCallback callBack);

 - > WaitCallback callBack 함수를 메서드 큐에 대기시킨다. 

위에선 ThreadFunc 함수를 대기 시킴, 대기 큐에 성공적으로 들어가지면 true

작업항목을 큐에 대기시키지 못하면  System.NotSupportedException이 발생.

 

델리게이트로 ThreadFunc의 함수포인터를 전달 시키는데

매개변수 타입이 없으면 에러가나서 사용할 매개변수가 없으면 형태만 맞춰주자.

 

위에서 50개를 출력시켜야 하는데 중도 종료 되는걸로 봐서

기본(default) background 에서 돈다는 것을 알 수 있다.

 

긴 작업의 경우 쓰레드 풀에 쓰레드가 돌아오지 못한다면,

작업큐가 꽉 차서 에러가 날 수도 있을것 같다. 짧은 단기 작업들을 시키는것이 좋다.

 

쓰레드풀의 쓰레드들을 모두 무한루프에 집어넣고 추가적인 작업을 시키려할때 모습.

쓰레드풀의 갯수를 최대 3개로 설정해놓고

무한루프 작업을 3번 시켜서. 쓰레드 3개가 모두 못나오는 상황을 만들고

새로운 추가작업을 시켰을때의 모습이다.

2개의 쓰레드만 무한루프에 넣어놓고 추가 작업을 시켰을때.

반대로 2개의 쓰레드만 무한루프속에 넣어놓고 추가작업을 시키면

나머지 하나의 쓰레드가 작업을 할 수 있다.

 

출력결과는 앞서 말했듯 백그라운드 쓰레드로 실행되므로

메인 쓰레드가 종료되면 실행중이던 백그라운드 쓰레드도 종료됨.

 

 

 

 

 

 

 

300x250

댓글