반응형
순차(sequential) / 병렬(parallel) / 병행(concurrent)
- 순차 처리 (sequential): 복수의 업무를 순서대로 하나씩 처리.
- 병렬 처리 (parallel): 복수의 업무를 "동시에" 처리.
- 병행 처리 (concurrent): 병렬에 비해 추상도가 높은 표현. 한 개의 업무를 어떠한 순서로 처리하든 상관 없는 여러 개의 작업으로 분할하여 처리.
- 멀티쓰레드 프로그램의 경우 병행 처리를 의미하며,
- 작업자가 한 명이라면 분할된 작업들을 순차적으로 처리하게 되지만, 두 명이라면 같은 작업을 병렬적으로 처리할 수 있다.
멀티쓰레드 프로그램
- 만약 CPU가 한 개 뿐이라면 병행처리를 순차적으로 실행할 테고, CPU가 여러개라면 병행처리를 병렬적으로 실행할 수 있다.
- 만약 CPU가 한 개 뿐이라면 병행처리 과정은...?
- 1) 첫번째 쓰레드가 조금 작동하다가 멈춘다.
- 2) 두번째 쓰레드가 조금 작동하가 멈춘다.
- 3) 첫번째 쓰레드가 조금 작동하다 멈춘다.
- 4) ....
- 이처럼 실제 작동하는 쓰레드가 바뀌면서 병행처리가 순차적으로 이뤄진다.
- 즉 "동일한 시간", "어떤 한 순간"에는 오직 하나의 쓰레드만 실행이 된다.
- 하지만 여러개의 쓰레드가 무작위로 번갈아가면서 실행됨으로서 "동시에" 처리되는 것처럼 보일 뿐이다.
쓰레드의 개수를 2배로 늘리면 처리량(throughput)도 2배로 늘어날까?
일반적으로 그렇지 않다. 그 이유는..
- 쓰레드 개수가 늘어났다고 해도, CPU 개수에 제약이 있다면 쓰레드들이 병렬로 동작한다고 보장할 수 없다. 그리고 쓰레드간 컨텍스트 스위칭 오버헤드가 발생한다.
- 처리하는 업무를 모든 쓰레드에게 균일하게 분담시키는 것이 가능하다고 장담할 수 없다.
- 하드웨어의 제약이 없어 2배의 쓰레드가 병렬로 동작했다고 하더라도, 쓰레드간 mutual exclusion을 수행하기 위한 오버헤드가 있다.
참고
- 순차(sequential) / 병렬(parallel) / 병행(concurrent) 처리방식 차이: https://soy.me/17
반응형
'Study: Software(SW) > SW: Language' 카테고리의 다른 글
[C++] 함수형 프로그래밍(feat. lambda function) (0) | 2022.07.06 |
---|---|
[C++] 조건부 컴파일 매크로(전처리기 지시어): Header Guard (#if, #ifdef, #elif, #else, #endif...) (0) | 2022.07.04 |
[C++] 객체지향 프로그래밍: special member function (feat. L-value, R-value, std::move) (0) | 2022.06.30 |
[C++] 객체지향 프로그래밍: Effective Modern C++ 정리 (0) | 2022.06.27 |
[C++] 객체지향 프로그래밍: static, explicit, mutable, default, delete... (0) | 2022.06.22 |