Post

WIL 동시성 병렬성

WIL 동시성 병렬성

2024 2분기가 시작됐다. 평소에 공부한 것을 기록하는 습관을 만들기 위해 2분기부터 WIL를 적어보려 한다. 현재 회사에서 Python으로 서버를 구현하는 것이 있어, 강의를 몇개 듣고 있다. 4월 1주차 WIL는 파이썬 동시성 프로그래밍: 데이터 수집부터 웹 개발까지(feat. FastAPI) 의 일부를 보고 공부한 것을 정리하고자 한다.

동시성과 병렬성을 ChatGPT에 물어보니 다음과 같이 대답한다.

동시성 Concurrency

동시성은 한 번에 여러 작업을 동시에 다루는 것을 의미합니다. 이는 한 번에 하나의 작업만 처리할 수 있는 단일 CPU 코어에서도 여러 작업이 동시에 진행되는 것처럼 보이게 할 수 있습니다. 동시성은 작업들 사이에서 실행 시간을 나누고, 작업의 상태를 전환함으로써 이를 달성합니다. 즉, 동시성은 여러 작업을 번갈아 가면서 진행하는 방식으로, 시간적으로 겹치지 않더라도 여러 작업이 동시에 처리되는 것처럼 관리됩니다.

  • 싱글 코어 또는 멀티 코어 시스템에서 활용 가능
  • I/O 작업, 사용자 이벤트 처리, 네트워크 통신 등 비동기 작업에 적합
  • 사용자 인터페이스, 웹 서버, 네트워크 서버 등에서 흔히 사용

병렬성 Parallelism

병렬성은 한 번에 여러 작업을 병렬적으로 처리하는 것을 의미합니다. 이는 여러 CPU 코어를 사용하여 다수의 작업을 실제로 동시에 처리하는 것을 가능하게 합니다. 병렬 처리는 작업의 실행 속도를 향상시키고, 컴퓨팅 자원을 효율적으로 사용하여 더 많은 작업을 더 빠르게 완료할 수 있게 합니다.

  • 멀티 코어 또는 여러 프로세서를 사용하는 시스템에서 주로 사용
  • 대규모 데이터 처리, 과학적 계산, 이미지 또는 비디오 처리에 적합
  • 빅 데이터 분석, 고성능 컴퓨팅(HPC) 등에서 활용

위의 설명만으로는 크게 와닿지 않는다 🤔

예시

강의에서는 동시성을 설명하기 위해 요리로봇 자비스를 가지고 예를 들었다.

  1. 여기 요리하는 로봇 자비스가 있다
  2. 자비스의 주요 임무는 주문받은 음식을 요리하는 것이다.
  3. 주문으로 라면이 들어왔다면, 자비스는 물 끓이기, 스프 넣기, 면 넣기 작업을 실행한다.

그렇다면 라면, 볶음밥, 제육볶음의 주문이 들어온다면?

시간을 효율적으로 활용하기 위해 라면 물을 끓이는 동안, 밥을 짓거나 재료 손질을 할 것이다. 3개의 Task에 대해 ` 스위칭이 일어난다는 것이다. 동시에 3개의 주문을 다루는 것이다. 동시에 처리하기 위해선 비동기적으로 처리할 수 있어야 한다. 만약 라면 물이 끓을 때 까지 기다린다면, 스위칭이 일어나지 않고 동시에 3개의 주문을 처리할 수 없을 것이다.


병렬성을 설명하기 위해 프라이데이와 캐런을 추가로 투입했다.(자비스 혼자만으로는 병렬성을 설명할 수 없다.) 자비스는 라면을, 프라이데이는 볶음밥을, 캐런은 제육볶음을 요리한다. 여러 로봇들이 물리적으로 여러 주문에 대해 병렬적으로 수행한다.

자비스, 프라이데이, 캐런을 CPU 코어에 대입해보자. CPU코어가 3개인 컴퓨터인 경우 각각 병렬적으로 프로세스를 각각 진행하게 되는 것이다.

동시성

논리적 개념이로 멀티스레딩에서 사용되기도 하고 싱글 스레드에서 사용되기도 한다. 또한 싱글 코어 뿐만 아니라 멀티 코어에서도 각각의 코어가 동시성을 사용할 수 있다.

병렬성

물리적 개념으로 여러 로봇들이 여러 작업을 병렬로 수행한 것 처럼, 멀티 코어에서 여러 작업을 병렬적으로 수행한다.

병렬성은 물리적 개념이고, 동시성은 논리적 개념이기 때문에 이 둘은 공존할 수 있다. 코어가 3개인데, 주문이 각각 100개가 들어왔다고 가정해보자. 3개 코어가 병렬적으로 주문을 받음과 동시에, 각각의 코어안에서 100개의 주문에 대해 동시성으로 각각의 작업들을 스위칭 하면서 처리할 수 있다.

This post is licensed under CC BY 4.0 by the author.