Four Ways to Use the Concurrency Runtime in Your C++ Projects
2009년 10월의 msdn매거진에 나온 병렬 런타임을 사용하는 예제입니다. User Interface의 반응성을 높이기 위하여 배경쓰레드를 사용하는 전통적인 방법을 PPL의 agent를 활용하였을 떄 얼마나 코딩이 더 쉬워지고, 더 굳건해지는 지를 보여주고 있습니다.
참고로 Agent는 병렬처리 엔진에 의한 별도의 쓰레드에서 작동하며 메시지로 데이터를 주고 받습니다. 병렬처리용인 관계로 CPU 개수나 코어 개수에 따라 물리적으로는 별도의 CPU에서 작동할 것입니다. 다른 말로 바꾸면 싱글CPU에서는 오히려 오버헤드가 걸린다는 이야기가 됩니다. 개인적인 지식과 경험으로 보았을 때는 IOCP같은 비동기 소켓이 훨씬 좋은 대안이 될 듯 합니다.
User Interface 관련 프로그래밍을 하신다면 볼만하며 부가적으로 아래와 같은 3가지 컨테이너의 차이점을 알려고 할 떄도 볼만합니다.
overwrite_buffer<T>
상수마냥 한번만 값을 설정하면 최종값의 복사본을 리턴합니다.
unbounded_buffer<T>
배경쓰레드에서 작업한 내용을 UI Thread에서 얻기 위하여 사용되어 질 수 있습니다. 메모리가 허락하는 범위 내에서 무한 수의 데이터를 저장합니다. 또한 파라메터 클래스 객체에 대하여 자체적으로 scoped-lock을 걸어주는 편의성을 제공합니다. overwrite_buffer<T>와는 다르게 값을 설정한 후 변경할 수 있습니다.
combinable
Thread Local Storage와 비슷한 개념이지 좀 더 사용하기 편하고 안전한 컨테이너인 combinable을 소개하고 있습니다.
※Thread Local Storage
코딩 상에서는 하나의 변수로 보이나 내부적으로는 쓰레드당 별도의 변수를 가져가 락킹에 대한 오버헤드를 줄이는 것을 목적으로 하는 기법입니다.
'개발 라이브러리 & 툴' 카테고리의 다른 글
[MongoDB] 윈도우용 MongoDB C/C++ Driver 컴파일 및 인스톨 하기 (0) | 2021.10.07 |
---|---|
C/C++ 병렬처리(멀티프로세스) 라이브러리 선택 (0) | 2021.10.03 |
비주얼스튜디오(Visual Studio) 시작 중에 비정상 종료될 때(Crash) 해결법 (0) | 2017.03.12 |
ATL/OLE DB관련 라이브러리 ver 1.02 (0) | 2010.02.17 |
[MPP] Visual Studion 2010 Parallel Patterns Library (PPL) ver 1.01 (0) | 2010.01.13 |
[MPP] Introduction to Intel's Threading Building Block (0) | 2009.12.01 |
[MPP] 메모리 일치 모델(Memory Consistency Models) (0) | 2009.11.19 |
[MPP] Introduction To Message Passing Interface(MPI) (0) | 2009.09.17 |