동시성과 병렬성에 대해 알아보자(Concurrency vs Parallelism)

동시성 vs 병렬성

image

동시성 (Concurrency)

동시성이란?

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

실질적으로는 한 번에 하나의 작업을 하지만, context switching을 아주 빠르게 진행함으로써 하나의 시스템에서 여러 작업을 동시에 처리하는 것처럼 보이게 하는 것이다.

동시성은 대게 스레드, 코루틴, 비동기 프로그래밍 등의 방법을 사용하여 구현된다.

동시성은 여러 작업을 번갈아가며 처리하므로 작업이 빠르게 완료될 수 있다.

싱글 코어 환경에서 단일 프로세스 내에 멀티 스레드를 동작하여 구현할 수 있다.

동시성에서는 context switching을 진행하기 때문에 Race condition, Deadlock, Starvation 등의 문제가 생길 수 있다.

동시성의 핵심 목표

동시성의 핵심 목표는 유휴 시간을 최소화하는 것이다.

유휴 시간

컴퓨터가 작동 가능함에도 작업을 하지 않는 시간으로 아무것도 안하고 놀고 있는 시간을 말한다.

현재의 작업중인 프로세스 혹은 스레드가 I/O 작업, DB 트랜잭션 등의 이유로 외부 프로그램 실행을 기다리는 동안 다른 프로스 혹은 스레드가 CPU 할당을 받는다.

이러한 여러개의 태스크(프로세스/스레드)들은 하나 이상의 코어에서 실행된다.

병렬성 (Parallelism)

병렬성은 동일한 시간에 독립적인 작업을 실행할 수 있음을 말한다. 즉, 여러 작업이 실제로 동시에 실행되고 있는 것을 말한다.

멀티 코어 환경에서 멀티 프로세스(단일 스레드) 혹은 멀티 스레드를 활용하여 처리한다.

병렬성은 동시성과 다르게 여러 작업을 다른 코어, 다른 프로세스, 별도의 컴퓨터 등에서 동시에 처리할 수 있다. 그렇기 때문에 병렬 처리가 성능 향상에 필수적이라고 한다.