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
Posted by Sweetmeats_boy

블로그 이미지
Sweetmeats_boy

태그목록

Yesterday
Today
Total

달력

 « |  » 2024.11
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

최근에 올라온 글

최근에 달린 댓글

최근에 받은 트랙백

글 보관함