C#

C# 비동기 프로그래밍 : Thread와 Task의 차이점

우준세 2023. 11. 21. 17:33
728x90
반응형

 

 

1. C# 비동기 프로그래밍 : Task 이해

2. C# 비동기 프로그래밍 : async, await 이해

3. C# 비동기 프로그래밍 : Task의 연속 작업 (Continuations) 이해

4. C# 비동기 프로그래밍 : Task와 Thread의 차이점

 

이번 포스팅은 C#에서 Task 메서드와 Thread 메서드의 차이에 대해 알아보려 합니다.

두 개념 모두 병렬 및 비동기 처리에 사용되지만, 각각의 역할과 사용법이 다르므로 이를 이해하는 것이 중요합니다.


| Thread와 Task 이해 

Thread와 Task 모두 병렬 및 비동기 처리에 사용되지만, 

각각의 역할과 사용법이 다르므로, 먼저 이를 이해하는 것이 중요합니다.

 

| Thread

운영체제의 최소 실행 단위로, 개발자가 직접 제어해야 합니다.

이는 생성, 시작, 중지 등의 작업을 개발자가 직접 관리해야 함을 의미합니다.

또한, 동기화 문제나 데드락 등 복잡한 문제를 해결해야 할 수도 있습니다. 

그러나 이런 복잡함에도 불구하고 Thread는 세밀한 제어가 가능하여 특정 상황에서는 사용하는 편입니다.

 

| Task

.Net Framework 4부터 도입된 비동기 작업을 추상화한 클래스입니다.

Task는 내부적으로 ThreadPool을 이용하여 스레딩을 관리하므로, 

개발자는 세부적인 작업을 신경 쓸 필요 없이 로직에 집중할 수 있습니다.

또한 앞서 포스팅했던 async/await 패턴을 지원하여 비동기 프로그래밍을 쉽게 구현합니다.

 

| Thread와 Task의 차이점 정리 

  Thread Task
정의 OS의 최소 실행 단위 비동기 작업을 추상화한 클래스
효율성 직접 제어 ThreadPool 사용, 효율적인 스레딩
사용성 생성, 시작, 중지 등의 직접 관리 필요 세부 작업 내부 처리, 로직에 집중 가능
코드 복잡성 동기화 문제, 데드락 등 해결 필요 문제를 더 쉽게 처리 가능
반환값 작업 결과 직접 반환 불가 Task<T> 형태로 반환 가능
비동기 지원 직접 지원 불가 async/await 문법 지원

| Thread와 Task 클래스 메서드 정리 

실제 C#에서 Thread 클래스와 Task 클래스의 메서드에 대해 알아보겠습니다.

 

| Thread 클래스의 메서드 

  1. Start() : Thread가 실행, Thread를 생성할 때 처리할 메서드를 지정하고 호출해야 실행 
  2. Join() : 해당 Thread의 처리가 끝날 때까지 대기,
    Join() 메서드를 호출한 Thread는 지정된 Thread 처리가 완료될 때까지 대기
  3. Abort() : Thread를 강제로 종료, 안전한 Thread 종료는 보장하지 않음
  4. Sleep() : Thread를 일시적으로 중지

 

| Task 클래스의 메서드 

  1. Start() : Task 실행, 그러나 보통 Task.Run() 메서드를 통해 생성하고 실행
  2. Wait() : Task 처리가 끝날 때까지 대기,
    Wait() 메서드를 호출한 Thread는 지정된 Task 처리가 완료될 때까지 대기 
  3. ContinueWith() : Task가 완료된 후에 수행할 작업을 지정,
    새로운 Task를 반환하므로 작업을 체인 형태로 연결 가능
  4. WhenAll(), WhenAny() : 여러 Task의 완료를 기다리는 Task 생성,
    WhenAll()은 모든 Task가 완료될 때까지 대기, WhenAny()는 주어진 Task 중 하나라도 완료되면 반환

 

Thread와 Task는 서로 다른 메커니즘과 메서드를 사용하지만

일반적으로 Task는 비동기 작업 수행, Thread는 병렬 처리를 위한 작업에 사용합니다.


| 마무리

이번 포스팅을 통해 Thread와 Task, 그리고 메서드에 대한 이해가 충분히 되셨으면 좋겠습니다. 

 

저도 이번 포스팅을 통해 정리를 할 수 있었고 작업에 조금 더 활용할 수 있을 것 같습니다.

 

틀린 점이나 질문이 있으시면 댓글로 남겨주세요!

 

다음 포스팅으로 찾아오겠습니다. 

 

 

감사합니다 :) 

 

 

 

728x90
반응형