Skip to content

07. 동시성과 병렬성

학습 목표

  • 동시성(Concurrency)과 병렬성(Parallelism)의 차이를 명확히 구분할 수 있다
  • CPU와 GPU의 구조적 차이를 이해하고 병렬 연산이 활용되는 사례를 설명할 수 있다
  • 멀티태스킹의 원리를 이해하고 운영체제가 시분할 방식으로 프로세스를 관리하는 방법을 안다
  • 교착상태(Deadlock)의 정의와 4가지 발생 조건을 설명할 수 있다
  • 작업 간 의존성이 동시 처리에 미치는 영향을 이해한다

전체 구조


1. 동시성 (Concurrency) 이란?

개념

동시성이란 서로 다른 두 가지 이상의 일동시에 일어나는 것을 말한다. 여기서 핵심 질문은 이것이다:

"독립적인 사건이 동시에 진행될 수 있는가?"

두 작업이 서로 간섭하지 않고 동시에 진행될 수 있다면, 그 작업들 사이에는 동시성이 있다고 말한다.

실생활 비유로 이해하기

비유 1: TV 보기 + 라면 먹기

  • 거실 소파에 앉아서 TV를 보면서 라면을 먹는 상황을 떠올려 보자
  • 눈은 TV 화면을 보고, 입은 라면을 먹는다
  • 두 작업이 서로 간섭하지 않으므로 완벽한 동시성이 있다
  • 하지만 만약 TV는 거실에 있고 라면은 부엌 식탁에 있다면?
    • TV를 보러 거실에 갔다가, 라면을 먹으러 부엌에 갔다가 해야 한다
    • 왔다 갔다 번갈아 해야 하므로 완벽한 동시성이라고 보기 어렵다
    • 하지만 두 작업 자체는 독립적이므로 동시성은 여전히 존재한다고 볼 수 있다

비유 2: 크롬으로 유튜브 보기 + 파일 다운로드

  • 유튜브 영상 재생과 파일 다운로드는 서로 완전히 독립적인 작업이다
  • 두 프로그램이 서로 간섭 없이 동시에 실행된다
  • 이것이 바로 동시성이 있는 상태이다

핵심 정리

동시성이 있다 = 두 작업이 동시에 진행되어도 문제없다 (서로 독립적이다)


2. 병렬성 (Parallelism) 이란?

개념

병렬성이란 같은 일을 **여러 주체(일꾼)**가 동시에 나눠서 수행하는 것을 말한다. 동시성이 "서로 다른 일"에 초점을 맞춘다면, 병렬성은 "같은 일을 여럿이 함께"에 초점을 맞춘다.

실생활 비유로 이해하기

비유: 인형 눈 붙이기 작업

장난감 공장에서 인형에 눈을 붙이는 작업을 한다고 생각해 보자.

  • 순차 처리: 직원 1명이 인형 100개에 혼자 눈을 붙인다. 하나 끝나면 다음 하나. 시간이 매우 오래 걸린다.
  • 병렬 처리: 직원 4명이 인형 25개씩 나눠서 동시에 눈을 붙인다. 이론적으로 4배 빠르다.

이것이 바로 병렬 처리이다. 같은 작업(눈 붙이기)을 여러 명이 나눠서 동시에 처리하는 것이다.

동시성과의 차이

구분동시성 (Concurrency)병렬성 (Parallelism)
초점서로 다른 독립적 작업같은 작업을 분할
핵심동시에 진행해도 문제없는가나눠서 동시에 처리할 수 있는가
예시유튜브 + 다운로드4명이 인형 눈 붙이기

핵심 정리

병렬성이 있다 = 같은 작업을 쪼개서 여러 주체가 동시에 처리할 수 있다


3. 동시성 vs 병렬성 정리 비교

상세 비교

항목동시성 (Concurrency)병렬성 (Parallelism)
정의서로 다른 독립적인 작업이 동시에 진행같은 작업을 여러 처리 주체가 나눠서 동시 처리
예시유튜브 보면서 파일 다운로드4명이 인형 눈 붙이기, GPU의 대규모 연산
하드웨어 요구CPU 1개로도 가능 (시분할 방식)물리적으로 여러 코어/프로세서가 필요
목적여러 작업을 효율적으로 관리하나의 작업을 빠르게 완료
비유1인 요리사가 여러 음식을 번갈아 조리여러 요리사가 같은 메뉴를 분담 조리

동시성과 병렬성의 관계

중요한 점은 병렬성은 동시성의 부분집합으로 볼 수 있다는 것이다.

  • 병렬로 처리되는 작업들은 당연히 동시에 진행되므로 동시성이 있다
  • 하지만 동시성이 있다고 해서 반드시 병렬로 처리되는 것은 아니다
  • CPU 1개로 시분할 방식으로 번갈아 실행하는 것도 동시성이지만, 진짜로 물리적으로 동시에 실행하는 것은 아니므로 병렬성은 아니다

쉽게 정리하면 다음과 같다:

  • 동시성: "구조(structure)"의 문제 -- 프로그램을 독립적으로 실행 가능한 단위로 나누는 것
  • 병렬성: "실행(execution)"의 문제 -- 실제로 물리적으로 동시에 실행하는 것

4. 실전 활용: GPU와 대규모 병렬 연산

GPU란?

GPU(Graphics Processing Unit)는 원래 그래픽 카드에 탑재된 연산 장치로, 화면에 그래픽을 빠르게 그리기 위해 설계되었다. 화면의 수백만 픽셀을 동시에 처리해야 하므로, 태생적으로 대규모 병렬 처리에 최적화된 구조를 가지고 있다.

CPU vs GPU: 구조적 차이

항목CPUGPU
코어 수4 ~ 64개 (소수)수천 ~ 수만 개 (대량)
코어 성능개별 코어가 매우 강력개별 코어는 단순
적합한 작업복잡하고 다양한 연산단순하지만 같은 연산을 대량으로
비유박사급 전문가 몇 명단순 작업 인력 수천 명

CPU는 "뛰어난 전문가 소수"에 비유할 수 있다. 복잡한 판단, 분기, 다양한 종류의 작업을 처리하는 데 탁월하다. 반면 GPU는 "단순 작업을 하는 대규모 인력"에 비유할 수 있다. 한 가지 단순한 작업을 수천 명이 동시에 처리하는 것이다.

GPU 활용 사례

  1. 영상 처리: 동영상의 각 프레임은 수백만 개의 픽셀로 이루어져 있다. 필터 적용, 색 보정, 합성 등을 각 픽셀 단위로 동시에 처리한다.
  2. 암호화폐 채굴: 특정 조건을 만족하는 해시값을 찾기 위해 수많은 해시 연산을 대량으로 병렬 수행한다.
  3. 딥러닝/AI: 신경망 학습은 거대한 행렬의 곱셈과 덧셈으로 이루어진다. 이 행렬 연산을 GPU의 수천 개 코어가 동시에 처리하여 학습 속도를 극적으로 높인다.

5. 멀티태스킹 (Multitasking)

개념

멀티태스킹이란 운영체제가 여러 프로세스를 동시에 실행하는 환경을 말한다.

여기서 몇 가지 용어를 정리하자:

  • 프로세스(Process): 실행 중인 프로그램. 메모리에 올라와서 CPU를 할당받아 동작하는 프로그램의 인스턴스이다.
  • 태스크(Task): 프로세스를 다른 말로 태스크라고도 부른다. 멀티태스킹이라는 이름이 여기서 나왔다.

어떻게 동시에 실행되는 것처럼 보이는가?

현대 운영체제는 기본적으로 멀티태스킹을 지원한다. 하지만 CPU 코어 1개는 한 순간에 하나의 프로세스만 실행할 수 있다. 그렇다면 어떻게 여러 프로그램이 동시에 실행되는 것처럼 보이는 걸까?

답은 시분할(Time-sharing) 방식이다.

  • CPU가 매우 빠른 속도로 프로세스를 번갈아 실행한다
  • 각 프로세스에 아주 짧은 시간(보통 수 밀리초)씩 CPU를 할당한다
  • 사람이 인지할 수 없을 정도로 빠르게 전환하므로, 사용자에게는 동시에 실행되는 것처럼 보인다

실생활 비유

1인 요리사가 3개 음식을 번갈아가며 조리하는 상황을 생각해 보자.

  • 파스타 면 삶기 시작 (물이 끓는 동안)
  • 스테이크 굽기 시작 (한 면 굽는 동안)
  • 샐러드 채소 썰기
  • 다시 파스타로 돌아와서 소스 볶기
  • 스테이크 뒤집기
  • ...

요리사는 1명이지만, 엄청나게 빠른 속도로 번갈아가며 요리하면 손님에게는 세 가지 음식이 거의 동시에 나온 것처럼 보인다. CPU가 바로 이 요리사와 같은 역할을 한다.


6. 교착상태 (Deadlock)

정의

교착상태(Deadlock)란 두 개 이상의 작업이 서로 상대방이 끝나기를 기다리며 영원히 진행되지 않는 상태를 말한다. 컴퓨터 과학에서 매우 중요한 개념이며, **전형적인 논리 오류(Logic Error)**에 해당한다.

실생활 비유

비유 1: 좁은 복도에서 마주친 두 사람

  • 좁은 복도에서 두 사람이 마주 보고 걸어온다
  • 서로 상대방이 비켜주기를 기다린다
  • 둘 다 비켜주지 않으면 아무도 지나갈 수 없다
  • 영원히 서로를 바라보며 멈춰 있게 된다

비유 2: 프린터와 스캐너

  • 직원 A가 프린터를 사용 중이면서 스캐너가 필요하다
  • 직원 B가 스캐너를 사용 중이면서 프린터가 필요하다
  • A는 B가 스캐너를 놓아주기를 기다리고, B는 A가 프린터를 놓아주기를 기다린다
  • 둘 다 자기가 가진 것을 놓지 않으면서 상대의 것을 기다린다
  • 결과: 아무도 작업을 완료하지 못한다

교착상태의 4가지 발생 조건

교착상태가 발생하려면 아래 4가지 조건이 모두 성립해야 한다. 하나라도 깨지면 교착상태는 발생하지 않는다.

조건설명비유
1. 상호 배제 (Mutual Exclusion)자원을 한 번에 하나의 프로세스만 사용할 수 있다프린터는 한 사람만 쓸 수 있다
2. 점유와 대기 (Hold and Wait)자원을 가진 채로 다른 자원을 기다린다A가 프린터를 쥔 채 스캐너를 기다린다
3. 비선점 (No Preemption)다른 프로세스의 자원을 강제로 빼앗을 수 없다A의 프린터를 B가 강제로 빼앗을 수 없다
4. 순환 대기 (Circular Wait)프로세스들이 순환 형태로 서로의 자원을 기다린다A는 B를 기다리고, B는 A를 기다린다

이 4가지가 동시에 모두 충족될 때만 교착상태가 발생한다. 따라서 교착상태를 예방하려면 이 4가지 조건 중 하나 이상을 깨뜨리면 된다.


7. 의존성 (Dependency)

개념

**의존성(Dependency)**이란 한 작업이 다른 작업의 결과에 의존하는 관계를 말한다. 두 작업 사이에 의존성이 있으면 동시에 처리하기 어렵다.

실생활 비유

라면 끓이기를 생각해 보자:

  • "물 끓이기"가 먼저 끝나야 "면 넣기"를 할 수 있다
  • "면 넣기"는 "물 끓이기"에 의존성이 있다
  • 이 두 작업은 동시에 할 수 없다 -- 반드시 순서대로 해야 한다

반면 "물 끓이기"와 "파 썰기"는 서로 의존성이 없다. 물이 끓는 동안 파를 썰 수 있다. 이처럼 의존성이 없는 작업끼리만 동시에 처리 가능하다.

의존성과 교착상태의 관계

교착상태는 본질적으로 양방향 의존성이 있는 작업들이 동시에 진행될 때 발생한다.

  • A가 B의 자원이 필요하고 (A는 B에 의존)
  • B가 A의 자원이 필요하면 (B는 A에 의존)
  • 양쪽 모두 상대방이 끝나기를 기다리며 영원히 멈춘다

따라서 시스템을 설계할 때는 작업 간의 의존성을 면밀히 분석하여, 순환적인 양방향 의존성이 생기지 않도록 주의해야 한다.


핵심 암기 포인트

개념핵심 정리
동시성 (Concurrency)서로 다른 독립적 작업이 동시에 진행될 수 있는 성질
병렬성 (Parallelism)같은 작업을 여러 주체가 나눠서 동시에 처리하는 것
GPU수천 개 코어로 대규모 병렬 연산 수행 (영상 처리, 채굴, AI)
멀티태스킹OS가 여러 프로세스를 시분할 방식으로 번갈아 실행
교착상태 (Deadlock)서로 상대방을 기다리며 영원히 진행되지 않는 상태 (논리 오류)
교착상태 4조건상호배제, 점유대기, 비선점, 순환대기 -- 4가지 모두 충족 시 발생
의존성의존성이 있는 작업끼리는 동시에 처리할 수 없으며, 양방향 의존성은 교착상태의 원인

확인 질문

  1. 동시성과 병렬성의 차이를 설명하시오. 동시성은 서로 다른 독립적인 작업이 동시에 진행될 수 있는 성질이고, 병렬성은 같은 작업을 여러 처리 주체가 나눠서 동시에 처리하는 것이다. 동시성은 CPU 1개로도 시분할 방식으로 구현 가능하지만, 병렬성은 물리적으로 여러 코어나 프로세서가 필요하다.

  2. CPU와 GPU의 구조적 차이를 설명하시오. CPU는 소수(4~64개)의 강력한 코어를 가지고 있어 복잡하고 다양한 연산에 적합하다. GPU는 수천 개의 단순한 코어를 가지고 있어 같은 단순 연산을 대량으로 동시에 처리하는 데 적합하다.

  3. 교착상태란 무엇이며, 실생활 예시를 하나 드시오. 교착상태는 두 개 이상의 작업이 서로 상대방이 끝나기를 기다리며 영원히 진행되지 않는 상태이다. 예를 들어, 직원 A가 프린터를 쓰면서 스캐너를 기다리고, 직원 B가 스캐너를 쓰면서 프린터를 기다리는 상황이 교착상태이다.

  4. 교착상태가 발생하려면 어떤 4가지 조건이 필요한가? (1) 상호 배제: 자원을 한 번에 하나의 프로세스만 사용, (2) 점유와 대기: 자원을 가진 채 다른 자원을 기다림, (3) 비선점: 다른 프로세스의 자원을 강제로 빼앗을 수 없음, (4) 순환 대기: 프로세스들이 순환 형태로 서로의 자원을 기다림. 이 4가지가 모두 충족되어야 한다.

  5. 멀티태스킹 환경에서 CPU는 어떻게 여러 프로세스를 동시에 실행하는 것처럼 보이게 하는가? CPU는 시분할(Time-sharing) 방식으로 각 프로세스에 아주 짧은 시간(수 밀리초)씩 번갈아가며 CPU를 할당한다. 전환 속도가 사람이 인지할 수 없을 정도로 빠르기 때문에, 사용자에게는 여러 프로세스가 동시에 실행되는 것처럼 보인다.