Concurrency(동시성)과 Parallelism(병렬성)은 같은 게 아니야?

Mando·2023년 4월 25일
1

운영체제

목록 보기
1/1

동시성과 병렬성❓️❓️❓️ 동일한 게 아니야❓️❓️❓️❓️

두 개념 모두 task를 하나씩 실행하는 것이 아닌 "동시에 실행" 하는 것 같은데
차이점이 무엇일까?

Concurrency(동시성) 과 Parallelism(병렬성)

  • 동시성 : 동시에 실행되는 것처럼 보이는 것(싱글코어, 멀티코어)
  • 병렬성 : 실제로 동시에 실행되는 것(멀티코어)

즉, 동시성은 동시에 실행되는 것처럼 보인다는 것이다. 실제로 동시에 실행되는 것이 아니다!!!!

동시에 실행이 되는 것도 아니고 동시에 실행이 되는 것처럼 보이는 건 뭘까❓️

Concurrency(동시성)

여러 작업을 빠르게 전환(Context Switching)하면서 수행하여 동시에 여러 작업이 실행되는 것처럼 보이는 것

따라서 한 개의 코어에서도 여러 작업을 Concurrent하게 실행할 수 있고 여러 작업이 동시에 실행되는 것처럼 보이기 위해 작업 간에는 context swtich가 일어난다.

동기화 문제는 Concurrent한 Task 사이에서 발생한다.

동기화 문제는 여러 작업이 동시에 공유된 자원에 접근하려고 할 때 발생한다.
멀티코어 뿐만 아니라 한 코어에서 concurrent하게 동작하는 task 사이에서도 동기화 문제가 발생한다.

한 코어에서 실행되는 task1과 task2가 공유자원인 data에 접근하려고 한다.

우리생각으로는 task1이 data에 1을 더하고 이후 task2가 또다시 data에 1을 더했으니 data는 2값을 가질 것이라고 생각이 든다.

하지만 동기화 문제가 발생하면 data에 101이 들어있을 수 있다.

(1) task1이 data값을 읽는다.
(2) task2가 data값을 읽는다.(이때는 task1이 아직 data값을 update하기 전이다.)
(3) task1이 data+=1을 실행한다. 이후 결과값은 1이다.
(4) 마찬가지로 task2도 data+=1을 실행한다. 이때도 결과값은 1이다.

이렇듯 Concurrent task 사이에서는 동기화 문제가 발생할 수 있기 때문에
동기화 문제를 막기 위한 동기화 기법을 사용해야 한다.

Parallelism(병렬성)

여러 작업을 실제로 동시에 수행하는 것
따라서 코어가 하나밖에 없다면 병렬적으로 프로그램을 실행할 수가 없다.
즉, 멀터코어 환경에서만 가능하다.

여러 코어에서 여러 작업을 동시에 수행하기 떄문에 Concurrency(동시성)과 마찬가지로 race condition 혹은 동기화 문제가 발생할 수 있다.

0개의 댓글