728x90
반응형

C#을 제대로 이해하려면 꼭 알아야 할 개념이 있습니다.
바로 비동기(Async)와 병렬(Parallel) 처리의 차이Task vs Thread 입니다.

이번 글에서는 이 둘을 쉽게 비교하고, 각각 언제 사용하는지 명확하게 정리합니다.


1.  비동기(Async) 처리란?

"메인 작업을 멈추지 않고, 시간이 오래 걸리는 작업을 기다리는 방식"

  • 하나의 쓰레드가 긴 작업을 기다리지 않고 다음 작업으로 넘어감
  • UI 멈춤 방지, 사용자 경험 향상에 필수
  • 주로 IO 작업(파일, DB, 네트워크 요청) 에 사용

 비동기 예시

async Task DownloadFileAsync()
{
    await Task.Delay(3000); // 3초 다운로드 시뮬레이션
    Console.WriteLine("다운로드 완료");
}
  • 메인 스레드는 멈추지 않고 다른 작업을 계속 수행할 수 있음

2.  병렬(Parallel) 처리란?

"여러 작업을 동시에 별도의 CPU 코어에 나눠서 실행하는 방식"

  • 실제로 동시에 여러 작업이 실행됨 (멀티쓰레딩)
  • 주로 계산량 많은 CPU 작업에 사용

 병렬 예시

Parallel.For(0, 5, i =>
{
    Console.WriteLine($"{i} 작업 처리 중 - 쓰레드 {Thread.CurrentThread.ManagedThreadId}");
    Thread.Sleep(1000);
});
  • 여러 쓰레드가 동시에 작업을 분산해서 처리함

3.  Async와 Parallel 비교

항목 비동기 (Async) 병렬 (Parallel)

초점 기다림 없이 처리 동시에 여러 작업 실행
주로 쓰는 작업 IO (네트워크, 파일 등) CPU 집약적 작업 (계산 등)
쓰레드 사용 추가 쓰레드 없이 진행 가능 여러 쓰레드를 적극 사용
예시 파일 다운로드, API 호출 대규모 수치 계산, 영상 처리

4. Task vs Thread

 Task란?

  • .NET이 제공하는 쓰레드 관리 추상화 객체
  • 내부적으로는 쓰레드를 사용할 수도, 안 할 수도 있음
  • 작업 예약, 실행, 완료 추적이 쉬움
Task.Run(() => {
    Console.WriteLine("Task 안에서 작업");
});

 Thread란?

  • OS 수준에서 바로 다루는 진짜 쓰레드
  • 더 많은 제어 가능하지만, 관리 비용(성능, 코드 복잡도) 큼
Thread t = new Thread(() => {
    Console.WriteLine("Thread 안에서 작업");
});
t.Start();

5. Task와 Thread 비교

항목 Task Thread

생성 비용 낮음 (풀링됨) 높음
관리 자동 스케줄링 수동 제어 필요
예외 처리 쉽고 안전함 어렵고 위험할 수 있음
주로 사용처 비동기 작업 특수한 병렬처리, 시스템 작업

이번 글에서는

  • 비동기(Async): 기다림 없이 작업 진행 (IO 작업)
  • 병렬(Parallel): 여러 작업을 동시에 실행 (CPU 작업)
  • Task: 쓰레드를 추상화한 쉽고 안전한 작업 단위
  • Thread: 직접 제어 가능한 무거운 작업 단위

을 정리했습니다.

이 개념을 이해하면 C#으로 고성능 프로그램을 더 안정적이고 깔끔하게 만들 수 있습니다.

 

728x90
반응형

+ Recent posts