728x90
쓰레드 풀 (ThreadPool)
- 쓰레드 임시 대기소같은 개념이다. 관리 되어야하는 작업들이 끝나면
해당 쓰레드를 삭제하지 않고 쓰레드풀에서 임시 대기 시켰다가 다시 필요하면 사용할 수 있다.
public static bool QueueUserWorkItem(WaitCallback callBack);
- > WaitCallback callBack 함수를 메서드 큐에 대기시킨다.
위에선 ThreadFunc 함수를 대기 시킴, 대기 큐에 성공적으로 들어가지면 true
작업항목을 큐에 대기시키지 못하면 System.NotSupportedException이 발생.
델리게이트로 ThreadFunc의 함수포인터를 전달 시키는데
매개변수 타입이 없으면 에러가나서 사용할 매개변수가 없으면 형태만 맞춰주자.
위에서 50개를 출력시켜야 하는데 중도 종료 되는걸로 봐서
기본(default) background 에서 돈다는 것을 알 수 있다.
긴 작업의 경우 쓰레드 풀에 쓰레드가 돌아오지 못한다면,
작업큐가 꽉 차서 에러가 날 수도 있을것 같다. 짧은 단기 작업들을 시키는것이 좋다.
쓰레드풀의 갯수를 최대 3개로 설정해놓고
무한루프 작업을 3번 시켜서. 쓰레드 3개가 모두 못나오는 상황을 만들고
새로운 추가작업을 시켰을때의 모습이다.
반대로 2개의 쓰레드만 무한루프속에 넣어놓고 추가작업을 시키면
나머지 하나의 쓰레드가 작업을 할 수 있다.
출력결과는 앞서 말했듯 백그라운드 쓰레드로 실행되므로
메인 쓰레드가 종료되면 실행중이던 백그라운드 쓰레드도 종료됨.
300x250
'Programing_Language > C#' 카테고리의 다른 글
[쓰레드 동기화]스핀 락(Spin Lock) 구현 (0) | 2020.07.20 |
---|---|
[쓰레드 동기화] Monitor 와 lock (IPC) (lock > Monitor 편의성) (0) | 2020.07.18 |
[쓰레드 동기화] Interlocked (공유자원과 임계구역) (0) | 2020.07.18 |
[쓰레드] TaskCreateOptions.LongRunning (0) | 2020.07.17 |
[쓰레드] IsBackground , join (0) | 2020.07.17 |
댓글