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
반응형
'개발이야기' 카테고리의 다른 글
[C#] WinForms로 파일 관리 앱 만들기 1탄 (0) | 2025.04.18 |
---|---|
[C#] 실전 미니 프로젝트 - 파일 관리 도구 만들기 (2) | 2025.04.17 |
[C#] 비동기 프로그래밍 완벽 가이드 (0) | 2025.04.17 |
[C#] 이벤트와 델리게이트 완전 정복 (0) | 2025.04.17 |
[C#] 예외 처리와 파일 입출력 완벽 가이드 (0) | 2025.04.17 |