병렬 처리
닷넷에서는 병렬 처리를 손쉽게 사용할 수 있는 API를 제공합니다. 다음 Parallel 클래스의 For() 또는 ForEach() 같은 메서드를 사용하면 병렬로 컴퓨터 자원을 최대한 사용하여 빠르게 작업을 처리할 수 있습니다.
//ParallelFor.cs using System; using System.Threading.Tasks; class ParallelFor { static void Main() { Parallel.For(0, 200_000, (i) => { Console.WriteLine(i); }); } }
다음은 반복을 20만 번 진행하면서 값을 출력하는데, 순서대로 실행되지 않고 다중 스레드로 나누어서 실행되고 있습니다. 참고로 필자 컴퓨터는 CPU 2개를 사용하고 논리 프로세서가 44개인 워크스테이션 PC다 보니, 다음과 같이 많은 코어가 100% 열심히 일을 합니다. 병렬 처리는 동시성과 달리 컴퓨터 자원을 최대한 사용하는데, 이를 직접 코드로 구현하는 것보다는 이미 닷넷에서 제공하는 TPL 라이브러리를 살펴보면 좋습니다.
▲ 그림 55-3 프로세서 여러 개가 열심히 일하기
다중 스레드와 병렬 프로그래밍을 맛볼 수 있는 예제 2개를 다루어 보았습니다. 스레드와 병렬 프로그래밍은 C# 고유의 문법이라기보다는 닷넷에서 제공하는 클래스 라이브러리입니다. C#에 이해를 높이고 싶거나 게임 프로그래밍처럼 현업에서 프로그램을 작성하다 성능 이슈가 발생할 때는 마이크로소프트 Docs 온라인 설명서를 참고합니다. 지금은 이 강의 내용 정도만 맛보기로 살펴보고 다음으로 넘어갑니다.