Shine's dev log

Concurrency와 Parallelism 본문

운영체제

Concurrency와 Parallelism

dong1 2020. 4. 26. 23:03

1. Concurrency와 parallelism

 

운영체제를 공부하다보면 concurrency와 parallelism이라는 단어가 정말 많이 나오고, 나올때마다 헷갈리는 개념이다.

 

둘 다 우리나라말로 번역하면 '병렬적...인..' 정도의 뜻을 가지고 있고 명확히 분리되는 개념은 아니기 때문에 헷갈리는게 지극히 정상이다. 앞으로 운영체제를 더 공부해나가기 전에 확실하게 둘의 차이를 알아보자.

 

Concurrent란 한개이상의 일들이 상태가 전진되어가며 진행되는 것을 말한다. 

 

시간과 관계없이 그냥 여러 task들이 making progress를 하고 있으면 어쨌든 concurrency가 있다고 한다.

 

Parallelism이란 여러개의 일들을 같은 시간상에서 봤을 때 정말 동시에 처리되는 경우를 말한다.

 

시간상 동시에 simultaneously하게 처리된다면 parallel 하다고 한다.

 

그래서 parallel하면 concurrent하지만, concurrent하다고 다 parallel한 것은 아니다.

 

concurrency와 parallelism을 그림으로 나타내보면 아래와 같다.

 

concurrency & parallelism

 

위 그림에서

 

concurrency 에 해당하는 그림을 보면, t1, t2, t3, t4가 동시에는 아니지만, 어쨌든 번갈아가면서 모두 처리가 되어가고 있기 때문에 concurrent 하다고 할 수 있다.

 

parallelism 에 해당하는 그림은 보면, 실제로 t1/t2, t2/t4, t4/t3, 처럼 두개의 task 가 같은 시각에 동시에 처리되고 있기 때문에 parallel 하다고 할 수 있다. (물론 여러 tasks들이 함께 처리되고 있기 때문에 parallel 하면서 concurrent 하다.)

 

2. Types of Parallelism

 

Parallelism에는 크게 두가지 유형이 있다. 첫째는 data parallelism이고, 둘째는 task parallelism이다.

 

1) Data parallelism

 

  data parallelism은 데이터 집합을 나누어서 나누어진 데이터를 대상으로 같은 연산을 동시에 수행하는 것이다.

 

  대표적인 예로는 배열내의 모든 원소의 합을 구할 때가 있다. arr[0]부터 arr[10]까지의 합은 core1이, arr[11]부터 arr[20]까지의 합은 core2 가 하는 식이다.

 

2) Task parallelism

 

  task parallelism은 같은 데이터를 가지고 다른 연산을 동시에 수행하는 것을 말한다.

 

  대표적인 예로는 한 반의 성적데이터를 가지고 두개의 코어가 평균과 분산을 각각 구하는 경우이다.

 

 

 

3. Amdahl's law

 

이렇게 parallel하게 처리를한다면 과연 어느정도의 이점이 있을까?

 

물론 프로세스의 모든 부분을 parallel하게 처리를 하는 것은 불가능하다. 하지만, 만약 P만큼의 비율을 parallel하게 처리하고 1-P 만큼의 비율을 serial하게 처리한다면,

 

Amdahl's law

 

위와같은 공식이 성립한다.

 

예를들어 60%만큼 parallel하게 동작하는 프로세스가 있다면, speedup = 1 / (0.4 + 0.3) 이되는 것이다.

 

 

오늘 내용을 정리해보면,

 

1. concurrency는 시간과 관계없이 여러 task들이 진행되는 것이다.

 

2. parallelism은 같은 시간에 동시에 여러 task들이 진행되는 것이다.

 

3. concurrency 하다고 parallelism을 보장받을 수 없다.

 

4. parallelism에는 data parallelism과 task parallelism이 있다.

 

5. Amdahl's law 는 병렬적으로 처리했을 경우 speed up 을 계산해준다.

 

 

'운영체제' 카테고리의 다른 글

쓰레드(Thread)_3 (Issues in Threading)  (0) 2020.04.28
쓰레드(Thread)_2 (multi threading models)  (0) 2020.04.27
쓰레드(Thread)_1 (쓰레드란?)  (3) 2020.04.26
UNIX 의 파일 처리  (0) 2020.04.15
Unix 시스템 소개 및 구조  (0) 2020.04.15