동시성 병렬성 : 멀티 태스킹의 비밀

들어가며

모든 사람들이 멀티 태스킹이라고 하면 직관적으로 병렬 작업을 생각할 것 같습니다.
하지만 멀티 태스킹을 공부하다 보면 동시성 병렬성 개념이 등장 합니다.

멀티 태스킹이 모두 병렬성 작업이 아닌 거였죠… 그렇다고 항상 멀티 태스킹 == 동시성 작업인것도 아닙니다.

오늘은 동시성과 병렬성에 대해 공부한 내용을 정리해보았습니다.

동시성 (Concurrency)

싱글 코어에서 멀티 스레드를 동작시키기 위한 방식으로 멀티 태스킹을 위해 여러 개의 스레드가 번갈아가면서 실행되는 성질을 말합니다.

동시성을 이용한 싱글 코어의 멀티 태스킹은 각 스레드들이 병렬적으로 실행되는 것처럼 보이지만 사실은 번갈아가면서 조금씩 실행되고 있는 것입니다.

스레드란?

스레드는 프로세스 내의 단일 순차적 제어 흐름을 나타냅니다.

병렬성 (Parallelism)

멀티 코어에서 멀티 스레드를 동작시키는 방식으로, 한 개 이상의 스레드를 포함하는 각 코어들이 동시에 실행되는 성질을 말합니다.

싱글 코어 시스템에서도 멀티 스레딩을 사용할 수 있지만 병렬 처리는 멀티 코어 시스템에서만 사용할 수 있습니다

과도한 계산, 매우 장기간 실행되는 프로세스에 유용합니다.

동시 멀티 스레딩을 써야 하는 경우

I/O 바인딩된 작업

작업에 파일 읽기 또는 쓰기, 네트워크 통신 또는 데이터베이스 액세스와 같은 중요한 I/O 작업이 포함되는 경우 동시 멀티 스레딩이 더 적합합니다.

스레드는 I/O 작업을 다른 작업과 겹쳐서 CPU 활용도를 최대화하고 전체 시스템 처리량을 향상시킬 수 있습니다.

비동기 프로그래밍

여러 클라이언트를 처리하는 GUI 애플리케이션이나 서버와 같이 응답성과 비차단 동작이 중요한 시나리오에서는 동시 멀티스레딩이 빛을 발합니다.

스레드는 기본 실행 흐름을 차단하지 않고 비동기 이벤트를 처리하고 사용자 입력에 응답할 수 있으므로 원활하고 응답성이 뛰어난 상호 작용을 보장합니다.

리소스 공유

작업이 리소스를 공유하거나 서로 통신해야 하는 경우 동일한 프로세스 내에서 동시 멀티스레딩이 유용합니다.

병렬 멀티 스레딩을 써야 하는 경우

CPU 바인딩된 작업

수학적 계산, 데이터 분석, 이미지 처리 등 주로 CPU 바인딩된 처리와 관련된 작업의 경우 병렬 멀티스레딩이 더 적합합니다.

여러 CPU 코어를 활용함으로써 병렬 멀티스레딩을 통해 작업을 동시에 실행할 수 있어 계산 속도가 빨라지고 성능이 향상됩니다.

데이터 병렬성

작업을 병렬로 실행할 수 있는 독립적인 하위 작업으로 나눌 수 있는 시나리오에서는 병렬 멀티스레딩이 탁월합니다.

마치며

멀티 스레딩도 동시 멀티 스레딩이 있고 병렬 멀티 스레딩이 있다는 사실을 알게 되었습니다.

시나리오에 따라 병렬로 갈지 동시로 진행할지 결정해야 한다는 사실도 알게 되었습니다.

이제 파이썬에서 어떻게 이를 구현하는지 정리해보도록 하겠습니다.

참고하면 좋은 글

Concurrency vs Parallelism | Baeldung on Computer Science

Leave a Comment

목차