[C#] Task와 Parallel.For 설명 및 활용법
2025. 4. 17. 09:27ㆍ개발이야기
728x90
반응형
C#으로 개발하다 보면 Task와 Parallel.For는 자주 접하게 됩니다.
특히 비동기 처리나 대량 데이터 처리, UI 멈춤 방지를 할 때 필수적으로 사용되죠.
이 글에서는 두 개념을 확실히 구분하고, 실제로 어떻게 사용하는지 코드 예시와 함께 정리해보겠습니다.
1. Task - 비동기 프로그래밍의 기본 단위
-. Task란?
Task는 .NET에서 비동기 작업을 처리하기 위한 대표적인 클래스입니다.
쉽게 말하면, "이 작업은 백그라운드에서 처리하고 끝나면 알려줘" 라는 개념입니다.
-. 핵심 특징
- 비동기 실행: UI 쓰레드를 막지 않음
- await로 작업 완료 기다릴 수 있음
- Task.Run으로 쉽게 실행 가능
-. 사용 예제
// 무거운 작업을 백그라운드에서 실행
await Task.Run(() =>
{
LongRunningOperation();
});
void LongRunningOperation()
{
Thread.Sleep(3000); // 3초 대기 시뮬레이션
Console.WriteLine("작업 완료");
}
2. Parallel.For - 병렬 루프 처리
-. Parallel.For란?
Parallel.For는 반복 작업을 여러 쓰레드로 나눠서 동시에 처리해주는 기능입니다.
반복문이 많을 때 하나씩 처리하지 않고 여러 개를 동시에 돌리는 방식입니다.
-. 핵심 특징
- CPU 코어를 최대한 활용함
- 순차 루프보다 훨씬 빠를 수 있음
- 단, 병렬 처리에 적합하지 않은 작업은 오히려 느려질 수 있음
-. 사용 예제
Parallel.For(0, 10, i =>
{
Console.WriteLine($"{i} 처리 중 - 쓰레드: {Thread.CurrentThread.ManagedThreadId}");
Thread.Sleep(500); // 작업 시뮬레이션
});
3. Task와 Parallel.For 차이점
항목TaskParallel.For
목적 | 비동기 실행 | 병렬 반복 처리 |
주로 쓰는 상황 | UI 멈춤 방지, 백그라운드 실행 | 대량 루프 처리 속도 개선 |
작성 형태 | Task.Run() 또는 async/await | Parallel.For(start, end, action) |
내부 스레드 | 쓰레드풀 | 쓰레드풀 (다중 스레드) |
4. 실무 적용 예시
1) UI를 멈추지 않고 처리
// UI 앱에서 버튼 클릭 시
private async void btnStart_Click(object sender, EventArgs e)
{
btnStart.Enabled = false;
await Task.Run(() => LongCalculation());
btnStart.Enabled = true;
}
2) 대량 데이터 병렬 저장
Parallel.For(0, 100, i =>
{
SaveToIniFile(i); // INI 저장 예시
});
5. 주의할 점
- Parallel.For 안에서는 UI 접근을 절대 하면 안 됨 (Control.Invoke 필요)
- 과도한 쓰레드 생성은 성능 저하 유발 가능
- 작업 간 공유 리소스가 있을 경우 락 처리 필수
Task와 Parallel.For는 서로 역할이 다릅니다. 하지만 함께 쓰면 강력한 성능 최적화가 가능합니다.
- Task: 작업을 비동기로 실행 (UI 안 멈추게 하기 위함)
- Parallel.For: 반복 작업을 병렬로 처리 (속도 개선 목적)
실제 프로젝트에서는 두 개를 조합해서 사용하는 경우가 많습니다.
728x90
반응형
'개발이야기' 카테고리의 다른 글
[C#] 문법 기초 정리 1 (0) | 2025.04.17 |
---|---|
[C#] 완전 입문 가이드 (쌩초보 가이드) (4) | 2025.04.17 |
[C#] INI 파일 대량 데이터 빠르게 저장하는 방법 (0) | 2025.04.17 |
C#에서 INI 파일 읽고 쓰기 (0) | 2025.04.16 |
[Linux] 리눅스 완전 처음 시작하는 사람을 위한 가이드 (2) | 2025.04.16 |