일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 저장프로시저
- .net
- task
- english
- 쿼리 최적화
- C#
- esl
- 실행계획 원리
- IdentityServer4
- TPL
- slow in the application
- 느린 저장프로시저
- identityserver
- stored procedure
- async
- await
- SQL Server Optimizer
- validation
- async await
- ThreadPool
- SQLServer
- Dataannotation
- identityserver3
- 영어공부
- MSSQL
- fast in ssms
- oauth2
- query
- execution plan
- SSMS
- Today
- Total
Genius DM
C# > ThreadPool Basic 본문
ThreadPool
System.Threading 네임스페이스에 속한 클래스로, 쓰레드 풀을 제공한다. Pool 은 영어 의미적으로 한 눈에 볼 수 있는 어떤 공간 ( 주로 사각형 ) 의 내용물을 의미한다. 그 내용물이 물이면 Swimming Pool 로 수영장이 되고, 당구공이 있으면 Pool Table 이 되어 당구대가 된다. Pool 은 그런 느낌이다.
고로 ThreadPool 이면, Thread 가 컨텐츠로 있는 공간을 의미하는 것이다. 이 ThreadPool 을 이용해서 비동기 I/O 작업을 할당하거나 특정 작업을 Thread 를 통해서 실행시킬 수 있다.
ThreadPool 의 장점
- 미리 생성된 Thread 를 사용하여 비용이 많이 드는 Thread 생성 작업을 생략할 수 있다.
- ThreadPool API 를 통해서 Delegate 를 Queue 에 넣어두면 ThreadPool 이 알아서 사용 가능한 Thread 에 작업을 할당한다.
- 작업 할당 뿐만 아니라 Thread 생성 / 소멸의 생명주기 관리를 자동으로 해준다.
- Thread 가 더 필요한 경우가 생기면 자동으로 ThreadPool 의 Thread 수를 증가시킨다. 그 반대도 마찬가지이다.
ThreadPool 의 단점
- 가볍고 빠르게 완료할 수 있는 작업에 최적화 되어있다.
- 1 초 이상이 걸리는 작업이라면, 별도 Thread 를 생성하는 것이 나을 수 있다.
- TPL ( Task Parallel Library ) 와는 다르게 작업을 대기 하거나 작업을 취소할 수 없다.
- Queue 에서 FIFO 방식으로 작업이 할당되어 중요도 순서로 작업을 오더링할 수 없다.
ThreadPool 예제
Quiz
ThreadPool 을 사용하게 되는 경우
- Task 또는 Taks<Result> 를 만들어 비동기 작업을 수행할 때, 기본적으로 Task 가 ThreadPool 의 Thread 를 실행시키도록 스케쥴링 된다.
- 비동기 타이머도 ThreadPool 을 이용한다. ThreadPool 은 System.Threading.Timer 클래스로부터 콜백을 받아 실행한다. 또, System.Timers.Timer 클래스에서 이벤트를 받아 이벤트를 발생시키기도 한다.
ThreadPool 에서 알아두어야 할 사항
ThreadPool
It's in System.Threading namespace. It provides a pool of threads. Pool means some contents in some space that is big enough to see with one slight look ( typically rectangular shape ). If the content is water, then the pool becomes swimming pool, and if the inside stuff is a series of billiard balls, then it becomes a pool table. That's the general picture of pool.
Thus ThreadPool means the space where threads live inside. You can allocate some asynchronous I/O tasks or some specific jobs through ThreadPool and offload the work items to one of the threads in the thread pool.
The pros of ThreadPool
- You don't have to create your own Thread which is computationally very expensive because there're a few threads that ThreadPool had created.
- You can use ThreadPool API to allocate a delegate for ThreadPool to execute it later automatically.
- Not only ThreadPool offloads the delegate to a thread, it also manages the life cycle of threads.
- Creating and deleting threads are on demand. It automatically creates one or deletes one when it thinks it's necessary.
The cons of ThreadPool
- It may not be suitable for heavy weight, slow jobs. You may need a dedicated, your-own created thread for that.
- If a task takes longer than a second, it's recommended to create your own thread.
- You can't wait a task or cancel it unlike TPL ( Task Parallel Library )
- You just can't reorder the jobs in the queue because it's FIFO.
ThreadPool example
Quiz
What uses ThreadPool
- When you create Task or Task<Result>Task for asynchronous jobs, basically the Task is scheduled to run a thread in ThreadPool.
- Asynchronous timer also uses ThreadPool. ThreadPool executes a callback from System.Threading.Timer class and so does from System.Timers.Timer class.
Something you should know
'.NET' 카테고리의 다른 글
.NET > Task Basics (0) | 2018.09.15 |
---|---|
C# > ThreadPool in details (0) | 2018.08.30 |
Image processing > Add a bitmap header to an image buffer. (0) | 2018.08.14 |
IdentityServer > Allow specific users in a client. (0) | 2018.08.11 |
IIS > IIS Express & IIS applicationhost.config path (0) | 2018.08.06 |