iOS/Swift

[Swift] 동시성 vs 병렬성

kimsangjunzzang 2025. 2. 26. 17:31
728x90
반응형

안녕하세요, iOS 개발하는 루피입니다!

 

오늘은 Swift 동시성 과 병렬성에 대해 간단하게 정리해보겠습니다.

 

바로 시작합니다.


1. 단일 코어 CPU 일때

단일 코어 CPU인 컴퓨터를 사용할 때, 우리는 컴퓨터가 여러 작업을 동시에 돌아가는 것과 같은 경험을 하게 됩니다.

 

예를 들어, 우리는 인터넷을 쓰면서, 음악도 같이 틀어 놓을 수 있죠!!

하지만, 사실은 그렇지 않습니다. 단일 코어 CPU는 한 번에 딱 한가지 일만 할 수 있기 때문입니다.

 

한 앱이 시작해서 살짝 작업을 진행하다 멈추고, 다른 앱이 시작해서 조금 진행하다 멈추고, 이러한 방식으로 반복하는 것입니다. CPU가 프로그램들 사이를 워낙 빨리 오가니깐 겉보기에는 다 같이 돌아가는 것처럼 느끼는 것뿐이죠.

 

이러한 개념이 바로 동시성입니다.


2. 두 번째 코어가 추가 된다면?

이때는 진짜로 병렬성이 가능해집니다.

 

병렬성은 두 개 이상의 프로그램이 실제로 같은 순간에 실행되는 걸 뜻합니다.

첫 번째 코어에서 한 프로그램이 돌고, 두 번째 코어에서 다른 프로그램이 돌아가는 식입니다.


3. 하나의 프로그램을 쪼개다

병렬성이 가능하다면, 중요한 사실은 한 프로그램 안의 작업도 더 작은 단위로 쪼개서 병렬로 돌릴 수 있다는 것입니다.

 

그리고 우리는 이 작은 단위를 스레드라고 부릅니다.

 

하지만, 이러한 기능은 우리가 직접해야 합니다. Swift 가 알아서 하지 못하기 때문이죠..!

 

우리는 미리 Swift에게 “이 코드 부분은 쪼갤 수 있다”고 알려주고, 그 작업이 끝나면 뭘 해야 하는지도 명확히 지정해 줘야 합니다.

3 - 1 ) 프로그램 / 프로세스 / 쓰레드

프로그램 (Program)

  • 정의: 실행 가능한 코드와 데이터의 집합입니다. 하드디스크나 SSD에 저장된 정적인 파일이에요. 예를 들어, Xcode에서 빌드한 .app 파일이 프로그램입니다.
  • 특징: 그냥 파일일 뿐, 실행되기 전엔 아무 일도 안 합니다. CPU나 메모리와 직접 관련이 없어요.
  • 비유: 요리 레시피 책. 요리를 시작하기 전의 상태예요.

프로세스 (Process)

  • 정의: 프로그램이 실행되면서 운영체제에 의해 메모리에 올라가 동작하는 상태입니다. CPU와 메모리 자원을 할당받아 독립적으로 실행됩니다.
  • 특징: 각 프로세스는 독립된 메모리 공간을 가지며, 다른 프로세스와 직접 간섭하지 않아요. 운영체제가 관리합니다.
  • 비유: 레시피를 보고 실제로 요리를 시작한 상태. 주방(메모리)에서 요리사(OS)가 재료(자원)를 주고 관리해요.

스레드 (Thread)

  • 정의: 프로세스 안에서 실행되는 작업의 단위입니다. 하나의 프로세스는 최소 하나의 스레드(보통 메인 스레드)를 가지며, 추가로 여러 스레드를 만들 수 있어요.
  • 특징: 같은 프로세스 안의 스레드들은 메모리와 자원을 공유합니다. 그래서 빠르고 가볍지만, 동기화 문제가 생길 수 있어요.
  • 비유: 한 주방에서 여러 요리사가 동시에 요리하는 상황. 같은 재료를 공유하며 작업을 나눠요.

결국 우리의 핵심은 Swift에게 프로그램 작업을 어떻게 쪼개서 최대한 효율적으로 돌리게 가르치냐는 것입니다.

그리고 이러한 우리의 노력은 앱이 항상 반응성을 유지하게 만들죠.


오늘도 화이팅입니다!

728x90
반응형