본문 바로가기
Engineer/병렬컴퓨팅

개념-1 : Concurrency vs. Parallelism

by _제이빈_ 2020. 3. 24.

Concurrency는 프로그램의 성질이고 parallelism은 기계의 성질이다. 
(Concurrenty is a property of the program and prallel execution is a property of the machine.)

 

병렬컴퓨팅이란, 하나의 문제를 여러개의 컴퓨팅 자원*을 활용하는 계산법이다.

먼저 병렬에 대한 정확한 이해를 위해 Concurrency** Parallelism**개념을 생각해 보자.

*여러개의 코어 또는 연산 노드 등 

**Concurrency : 병행성, 동시성, 동시실행 ***Parallelism : 병렬성, 평행성, 평행실행

 

Rob Pike의 강연에 따르면, Concurrency는 일반적으로 용어 프로세스의 의미) 함께 작동하기 위해 독립적인 과정을 구성하는 것이고, Parallelism은 실제로 여러 과정을 동시에 실행하는 것이다. 동시성은 애플리케이션의 설계와 구조에 관한 것이고, 병렬은 실제 실행과 관련된 것이다.


다시말하면,  Concurrency는 어떤 프로그램이나 알고리즘이 순서에 상관없이 동시에 수행될 수 있는 성질이다.  즉, 물리적으로 동시에 구하지 않더라도 부분적 계산이 가능하는 것이다. 예를 들어, 1부터 100까지 숫자를 더하는 과정을 생각해보면 이해하기 쉽다. 덧샘으로만 이뤄져 교환법칙이 성립하는 문제이다. 즉, 숫자들을 여러 집합으로 나눠 순서 관계없이 합을 구하고 부분합을 다시 더해도 최종 값을 얻을 수 있다. 여기서 부분합은 물리적으로 동시에 계산해도(병렬계산) 되고 그렇지 않아도 된다. Parallelism은 어떤 프로그램이나 알고리즘이 물리적으로 동시에 수행될 수 있는 성질이다. 

 

 

두 개념의 차이는 ThreadProcess의 차이와 거의 유사하다. Thread는 컴퓨터의 자원(예. 메모리와 I/O(Input/Output)장치)들을 공유하고, Process는 독립적으로 OS로부터 할당받아 사용한다. 일반적으로 Process는 여러 Thread를 호출(Invoking)하고 관리한다. 어플리케이션이 실행될 때 한 개의 Process가 발생한다. 그리고 이 Process가 어떠한 일을 할 때 컴퓨터의 자원을 최대로 활용하기 위해서는 병렬적으로 일을 하게 만들어야 한다. 이때 Thread를 이용해서 컴퓨터의 놀고 있는 자원들을 최대한으로 사용하게 만든다(Multi-Thread Programming의 영역). 즉, I/O를 기다리게 하지 않고 다른 일을 하게 하고 놀고 있는 여분의 CPU 코어들을 최대한 사용하게 하는 것이다.

 

 

출처:

https://12bme.tistory.com/184

http://egloos.zum.com/minjang/v/2517211

http://rapapa.net/?p=2704

개념이 잘 정리됨(영문): https://nikgrozev.com/2015/07/14/overview-of-modern-concurrency-and-parallelism-concepts/

반응형

댓글