동시성과 병렬성의 개념과 차이

권태형·2023년 3월 18일
3

지식정리

목록 보기
37/72
post-thumbnail

😀CS를 준비하면서 동시성과 병렬성을 비교해서 설명하라는 예상질문을 보았다. 근데 비교해서 설명한다면 서로의 차이점에 대해서만 설명하게 되지않을까? 일단 동시성과 병렬성이라는 기본 적으로 각 개념이 가지고있는 고유의 특성을 알지못하고 차이점만 알고 있다면 면접에서 쉬이 말할 수 있겠지만, "그게 나에게 도움이 얼마나 될까?" 라는 생각을 하게 되어 이번 포스팅을 정리하게 되었다.

각 개념이 가지는 정의와 특징을 알아보면서 두 개념의 차이를 확인해 보자.

동시성(Concurrency)

😀이름만 따지고 보면 동시에 발생하는 성질의 의미를 가지고 있으나, IT용어 측면의 동시성은 아래와 같은 의미를 가진다.

동시성은 하나의 시스템이 여러 작업을 동시에 처리하는 것처럼 보이게 하는 것이다.

실질적으로는 한번에 하나의 작업만을 처리한다.

  • 동시성은 대개 스레드, 코루틴, 비동기 프로그래밍 등의 방법을 사용하여 구현된다. 동시성은 여러 작업을 번갈아가며 처리하므로 작업이 빠르게 완료될 수 있다. 예를 들어, 웹 서버에서 여러 클라이언트 요청을 동시에 처리하면서 각 요청을 번갈아가며 처리할 수 있다.

😀이와 가장 비슷한 개념으로 멀티태스킹이 있다. 많은 포스팅에서 멀티태스킹과 동시성은 같은 개념이라고 설명해준다. 하지만 일부 포스팅에서는 비슷한 개념이지만, 다른 부분이 있다고도 설명해준다.

멀티태스킹(multitasking)

멀티태스킹 또한 동시성과 같이 하나의 시스템이 여러 작업을 동시에 처리하는 것처럼 동작한다.

멀티태스킹(multitasking)은 운영 체제에서 하나의 컴퓨터에서 여러 개의 프로그램이 동시에 실행될 수 있는 기능을 말한다. 멀티태스킹은 일반적으로 CPU 시간을 분할하여 여러 프로그램이 동시에 실행되는 것처럼 보이도록 한다.

  • 멀티태스킹은 주로 운영 체제에서 제공되며, 여러 개의 프로세스나 쓰레드를 동시에 실행하고 관리하는 방법으로 구현된다. 일반적으로 운영 체제는 CPU 시간을 조절하고 프로세스나 쓰레드 간의 우선 순위를 관리하여, 여러 작업이 동시에 실행될 수 있도록 한다.

😀이렇게 개념적인 측면만 알았을 때는 같은 개념같아보이기도 한다. 일부 차이점에 대해서 알아보자.

동시성 vs 멀티태스킹

동시성(Concurrency)과 멀티태스킹(Multitasking)은 컴퓨터 과학 분야에서 비슷한 개념으로 사용되기도 하지만, 약간의 차이가 있다.

  • 멀티태스킹은 하나의 시스템에서 여러 개의 작업(task)을 동시에 실행하는 것을 말한다. 운영 체제에서는 이를 위해 여러 개의 프로세스 또는 스레드를 생성하여 동시에 실행한다. 이러한 멀티태스킹 방식은 하나의 CPU를 사용하여 여러 작업을 처리하므로 시스템 자원의 효율성이 높아진다.

  • 동시성은 하나의 작업 내에서 여러 개의 서브 태스크(subtask)를 동시에 처리하는 것을 말한다. 이는 여러 개의 스레드를 생성하여 하나의 작업을 분할하여 처리하거나, 비동기적으로 여러 개의 작업을 처리하는 것 등을 말한다. 동시성은 멀티태스킹과 마찬가지로 동시에 작업을 수행하지만, 작업이 독립적이지 않고 서로 의존성을 가지는 경우에 적합하다.

😀이처럼 하드웨어적인 측면으로 보았을 때는 멀티태스킹이 동시성보다 상위의 인자로 위치해있다.
프로세스가 스레드를 포함하 듯이, 멀티태스킹은 프로세스의 동작을, 동시성은 스레드의 동작을 의미할 수 있다.


병렬성(Parallelism)

병렬성은 여러 작업을 실제로 동시에 처리하는 것이다.

여러 CPU 또는 코어를 사용하여 여러 작업을 병렬로 처리할 수 있다. 예를 들어, 대용량 데이터 처리나 과학 계산 분야에서 여러 계산 작업을 병렬로 처리할 수 있다.

  • 병렬로 처리할 작업들은 병렬처리기에서 실행되며, 각각의 작업은 별도의 프로세스나 스레드에서 실행된다. 이러한 병렬처리기는 여러 개의 CPU 또는 CPU 코어가 있어서, 각각의 작업이 서로 다른 CPU 또는 CPU 코어에서 병렬적으로 실행된다.

  • 병렬성은 멀티코어 컴퓨터에서 많이 사용되며, 실행 시간을 줄이거나 처리량을 늘리는 데에 사용된다.
    예를 들어, 병렬처리를 사용하여 이미지나 비디오를 인코딩하거나, 대규모 데이터를 처리하는 등의 작업을 효율적으로 처리할 수 있다.


동시성 vs 병렬성

병렬성과 동시성은 비슷해 보이지만 완전히 다른 개념이다. 병렬성은 여러 작업이 동시에 실행되는 것이지만, 이러한 작업들은 각각이 독립적으로 실행되며 서로 영향을 주지 않는다. 반면에 동시성은 서로 다른 작업들이 서로 영향을 주면서 동시에 실행되는 것처럼 보인다.

구분동시성병렬성
개념동시에 처리하는 것처럼 보이게 하는 것여러 작업을 실제로 동시에 처리하는 것
사용 코어 수싱글 코어멀티 코어
동작 방식싱글 코어에서 멀티 쓰레드(Multi thread)를 동작 시키는 방식멀티 코어에서 멀티 쓰레드(Multi thread)를 동작시키는 방식
개념적 차이논리적인 개념물리적인 개념

참고자료(출처)
찰스의 안드로이드 동시성과 병렬성의 차이 포스팅
Smart Tiger's blog 동시성(Concurrency) vs 병렬성(Parallelism) 포스팅
파이스탁 유튜브 동영상 [01강 동시성과 병렬성]

profile
22년 12월 개발을 시작한 신입 개발자 ‘권태형’입니다. 포스팅 하나하나 내가 다시보기 위해 쓰는 것이지만, 다른 분들에게도 도움이 되었으면 좋겠습니다. 💯컬러폰트가 잘 안보이실 경우 🌙다크모드를 이용해주세요.😀 지적과 참견은 언제나 환영합니다. 많은 댓글 부탁드립니다.

0개의 댓글