2021. 6. 20. 22:55 개발언어/C#
Thread와 Task
우선 Thread에 대해서는 보통 잘 알것이다.
Process에 속하며 같은 Process에 속한 Thread 끼리는 data, code, heap 영역을 공유한다.
그렇다면 C#에서 async, await를 할 때 언급되는 Task와 Thread는 어떠한 차이가 있는것일까?
우선 MSDN 문서 기준으로 Task class는 비동기 작업을 나타낸다고 되어 있다.
즉 Thread의 경우 Process에서의 "실행 흐름"을 나타낸다면
Task는 "비동기적으로 실행되는 단일 작업" 을 의미한다.
Task는 C# .NET Framework4에서 처음 도입된 TAP패턴의 구성요소이다.
Task는 C#이 관리하는 Thread pool을 통해서 실행, 관리되며 Status 속성, IsCancled 등을 통해
외부에서 해당 Task의 작업 현황을 알 수 있다.
C#에서 Task를 생성 및 실행하는 방법은 여러가지가 존재하며
개인적으로 자주 사용하는 방법은 Task.Factory.StartNew / Task.Run 이 두가지 방법이다.
Task를 생성, 실행한 후 해당 Task에 대해서 await를 앞에 적어주면 Task가 작업을 완료할 때까지 대기하게 된다.
이 때 내부적으로 일어나는 일은 More Effective C#에 자세히 나와있으니 참고할 것.
아 그리고 Task가 비동기적으로 실행되는 작업 단위라고 했지만 Task의 생성 및 실행과 동시에 작업이 완료될 수 있다.
개인적으론 Multi Tasking / MultiThreading 두가지 모두 Server에서 유효하지만
C#이 관리하는 Thread Pool 을 통한 Task단위로 작업을 실행하는 것이 개발자의 실수를 좀더 줄여주지 않을까 싶다.
-> 단, Task는 현자의 돌이 아니니 사용할 때 개념을 확실히 잡고 사용해야 한다.
'개발언어 > C#' 카테고리의 다른 글
CancellationTokenSource 과 CancellationToken (0) | 2019.11.29 |
---|---|
ThreadStatic 과 ThreadLocal (0) | 2019.11.28 |
알아두면 어쩌다 쓸것같은 Attribute들-1 (0) | 2019.09.05 |
async, await란 (0) | 2019.08.11 |