본문 바로가기

parallel

[C#] 병렬 프로그래밍 Parallel Programming (4) - 데이터 흐름 예제 데이터 흐름 예제 기초 예제 아래 예제는 비동기로 BufferBlock 데이터 흐름 블록에 데이터를 입력했다가 출력하는 예제입니다. var bufferBlock = new BufferBlock(); // bufferBlock 에 비동기로 데이터 넣기 for (int i = 0; i < 3; i++) { await bufferBlock.SendAsync(i); } // bufferBlock 에 비동기로 데이터 빼기 for (int i = 0; i < 3; i++) { Console.WriteLine(await bufferBlock.ReceiveAsync()); } /* 결과: 0 1 2 */ 아래 예제는 병렬로 데이터 흐름 블록에 데이터를 입력했다가 출력하는 예제입니다. var bufferBlock = n..
[C#] 병렬 프로그래밍 Parallel Programming (3) - 데이터 흐름 데이터 흐름 데이터 흐름은 프로그래밍 패러다임이 다른 병렬 프로그래밍입니다. 일반적으로 배우는 프로그래밍 언어는 코드로 절차를 정의하고 실행해 결과를 만듭니다. 절차는 메서드로 구현되고 메서드의 실행 순서에 따라 프로그램이 동작합니다. 반면, 데이터 흐름은 절차가 아닌 데이터가 중심입니다. 데이터 중심이란 데이터로 프로그램의 동작을 정의하게 되는걸 의미합니다. 데이터 흐름에서 프로그램은 필요한 데이터를 준비시키고, 데이터가 준비되어야 다음 연산을 실행합니다. 다시말해 프로그램은 데이터가 준비되어야만 진행됩니다. 예를 들어 여러 이미지를 합성해 하나의 이미지로 만드는 프로그램은 소스가 되는 이미지들이 준비되었는지를 먼저 확인합니다. 소스 이미지들이 준비되었으면 프로그램은 이미지를 합성하는 연산을 진행합니다..
[C#] 병렬 프로그래밍 Parallel Programming (2) - 작업 병렬화 작업 병렬화 Task Parallelism 작업 병렬화는 일반적으로 생각하는 병렬 처리를 방식입니다. 작업 병렬화는 데이터 병렬화와 달리, 데이터마다 동일한 처리를 하는 방법이 아닌, 독립적인 작업들을 동시에 처리하는 방식입니다. 데이터 병렬화와 마찬가지로 작업 병렬화도 TPL 이 개발자를 대신하여 스레드를 관리합니다. 따라서 개발자는 병렬 프로그래밍을 Parallel.Invoke 메서드를 사용해 아래와 같이 손쉽게 구현할 수 있게 되었습니다. Parallel.Invoke(() => DoSomeWork(), () => DoSomeOtherWork()); 예제 코드는 Parallel.Invoke 메서드로 DoSomeWork() 과 DoSomeOtherWork()을 병렬로 처리하고 있습니다. 코드의 내부 동..
[C#] 병렬 프로그래밍 Parallel Programming (1) - 데이터 병렬화 병렬 프로그래밍 Parallel Programming C++ 시절 병렬 프로그래밍은 하드웨어 수준의 조작이 필요해 굉장히 어려웠고 버그도 많았습니다. 더 큰 문제는 병렬 프로그래밍을 위한 디버깅 도구도 마땅치 않았으며, 병렬 프로그래밍에 능숙한 개발자도 없어 팀으로 일하는건 불가능했습니다. 하지만 Visual Studio 의 뛰어난 기능과 편리한 라이브러리의 등장으로 병렬 프로그래밍에 입문하기 굉장히 쉬워졌습니다. 시작하기에 앞서... 개발자가 굉장히 쉽게 오해하는 부분이 병렬 프로그래밍을 비동기 프로그래밍 개념의 확장으로 이해하는 부분입니다. 병렬 프로그래밍은 비동기 프로그래밍이 아닙니다! 병렬 프로그래밍과 비동기 프로그래밍 모두 컴퓨터에게 제일 중요한 자원인 중앙처리장치(CPU)를 효율적으로 사용하기..