얼마전 코루틴에 공부하다 동시성 프로그래밍에 대한 이야기가 나왔습니다. 운영체제를 공부할 때 동시성과 병렬성을 열심히 비교했던 것이 엊그제 같은데 기억이 희미해진 것 같아 이번 기회에 정리한 것을 기록하려고 합니다.

참고한 자료는 다음과 같습니다.

여러 작업에 대한 처리를 지원한다

예를 들어, 컴퓨터에서 다음과 같은 작업을 처리해야한다고 가정해보죠.

  • 크롬을 이용하여 구글링
  • 유튜브 뮤직을 이용하여 노래 듣기
  • 클라우드로부터 데이터 동기화

하나의 프로세서는 특정 시점에 단 하나의 프로세스를 처리할 수 있습니다. 따라서 컴퓨터는 원래 한 가지 작업밖에 처리를 하지 못하므로 구글링을 모두 마친 후에 노래를 들을 수 있고 노래를 모두 들은 후에 데이터를 동기화 할 수 있습니다. 그러나 우리가 사용하는 컴퓨터는 이를 동시에 처리합니다.

동시성과 병렬성

이를 가능하게 하는 것이 바로 동시성과 병렬성입니다. 동시성과 병렬성의 정의는 다음과 같습니다.

  • 동시성: 여러 작업을 처리할 수 있음
  • 병렬성: 여러 작업을 동시에 처리할 수 있음

우선 병렬성에 대해 알아보도록 하겠습니다. 하나의 프로세서는 특정 시점에 하나의 프로세스를 처리할 수 있습니다. 따라서 여러 작업을 동시에 처리할 수 있다는 것은 여러 프로세서를 가진 멀티 코어 시스템이라는 것을 의미합니다.

Untitled.png

반면, 동시성의 경우 그저 여러 작업을 처리할 수 있기만 하면 됩니다. 멀티 코어 시스템을 이용하여 동시성을 만족할 수도 있지만 단일 프로세서 환경에서도 동시성을 만족할 수 있습니다. 분명 하나의 프로세서는 하나의 프로세스만 처리할 수 있는데 동시성을 어떻게 만족하는 것일까요?

단일 코어에서 동시성

단일 코어에서 동시성을 만족하는 비결은 처리 중인 프로세스를 전환하는 것입니다.

Untitled.png

CPU가 처리할 프로세스를 빠르게 전환함으로써 사용자가 여러 작업이 동시에 처리되는 것처럼 느끼게 하여 동시성을 만족할 수 있습니다. 작업할 프로세스를 선택하고 전환하는 과정은 운영체제의 프로세스 스케줄링에 의해 관리됩니다.

동시성과 병렬성에 대한 명제

동시성과 병렬성은 동시에 만족할 수 있고 아닐 수 있습니다. 위에서 살펴본 그림을 정리하면 아래와 같습니다.

Untitled.png

병렬성을 만족하면 동시성을 만족하지만 역은 성립하지 않습니다.

마무리하며

이번 글에서는 컴퓨터가 여러 작업을 처리하는 성질인 동시성과 병렬성에 대해 알아보았습니다. 공통적인 개념을 포함하기 때문에 헷갈릴 수 있지만 명확히 구분해야합니다. 특히, 동시성을 만족하면서 병렬성을 만족할 수도 있고 아닐 수도 있다는 점이 가장 중요합니다. 두 개념에 대한 이해를 바탕으로 다른 곳에서 도움이 되길 바랍니다.

댓글남기기