목차
- 동시성(Concurrency)이란
- 멀티태스킹이란
- 동시성과 멀티태스킹은 같은 말일까?
- 병렬성이란
- 동시성과 병렬성의 차이
- 동기(synchronous)란
- 비동기(asynchronous)란
동시성(Concurrency)이란
동시성이란 이름만 놓고 본다면 실제로 동시에 동작해야 할 것 같지만, IT용어 측면에서 동시성이란 아래와 같은 의미를 지닌다고 합니다.
Concurrency means that an application is making progress on more than one task - at the same time or at least seemingly at the same time (concurrently).
동시성은 하나의 Processor가 여러 task를 동시에 처리하는 것처럼 보이게 하는 것이다.
하나의 Core 에선 스레드를 통해 2개 이상의 작업을 아주 짧은 시간으로 나누고 번갈아 빠르게 처리함으로써, 사용자 눈엔 여러 작업이 동시에 수행되는 것처럼 느끼게 되니까 동시에 처리하는 것처럼 보인다. 라고 말하는 것 같습니다.
멀티태스킹이란
멀티태스킹 또한 동시성과 같이 하나의 시스템이 여러 작업을 동시에 처리하는 것처럼 동작한다.
멀티태스킹이란 process가 한번 CPU를 사용할 때 아주 짧은 시간(quantum)만 실행되도록 하여 각 process의 작업을 아주 작은 단위로 번갈아 가며 처리하면서, 작업 응답 시간을 최소화 시키는 방법입니다.
이때 잘게 나뉘어진 프로세스 끼리 작업이 스위칭 되는 것을 Context Switching 이라고 합니다.
동시성과 멀티태스킹은 같은 말일까?
동시성과 멀티태스킹은 용어가 사용되는 상황은 비슷하지만, 위에서 알아보았듯이 엄연히 다른 용어라고 보입니다.
멀티태스킹은 CPU관점에서 각 process를 컨텍스트 스위칭하며 번갈아가며 처리하는 방식을 말하고,
동시성은 process관점에서 각 task를 스레드를 통해 동시에 실행하는 것처럼 보이는 방식입니다.
따라서 하드웨어적인 측면에서 본다면, 멀티태스킹안에 동시성이 포함되는 구조라고 이해하면 될 것 같습니다.
병렬성이란?
Parallel execution is when a computer has more than one CPU or CPU core, and makes progress on more than one task simultaneously.
병렬성은 컴퓨터에 두개 이상의 CPU 또는 CPU 코어가 있고, 동시에 두 개 이상의 작업을 진행하는 경우입니다.
동시성을 설명할 때 코어 한 개만 예시로 사용했지만, 실제 현대 CPU에선 멀티 코어를 사용하기 때문에 실제로 여러 task를 동시에 처리할 수 있습니다.
동시성과 병렬성의 차이
동시성과 병렬성은 비슷해보이지만 완전히 다른 개념이다. 병렬성은 여러 작업이 실제로 동시에 실행되며 각각 독립적으로 실행되지만, 동시성은 여러 작업이 동시에 실행되는 것처럼 보이게 하는 것이다.
구분 | 동시성 | 병렬성 |
---|---|---|
개념 | 동시에 처리하는 것처럼 보이게 하는 것 | 여러 작업을 실제로 동시에 처리하는 것 |
사용 코어 수 | 싱글 코어 | 멀티 코어 |
동작 방식 | 싱글 코어에서 멀티 쓰레드(Multi thread)를 동작 시키는 방식 | 멀티 코어에서 멀티 쓰레드(Multi thread)를 동작시키는 방식 |
개념적 차이 | 논리적인 개념 | 물리적인 개념 |
동기(synchronous)란
동기는 사전적으로 '동시에 일어난다'는 의미를 갖고 있습니다.
프로그래밍에서 동기(synchronous)란 작업이 순차적으로 진행되는 것을 의미합니다.
즉, 한 작업이 시작되면 해당 작업이 완료될 때까지 다른 작업이 기다려야 합니다.
호출한 함수 또는 작업이 반환될 때까지 대기하는 동안 실행 흐름이 차단되는 특징이 있습니다.
동기 방식은 일반적으로 간단하고 직관적인 코드를 작성하기 쉽습니다.
하지만 여러 작업이 동시에 실행되어야 하는 경우, 각 작업의 완료를 기다리는 동안 시간이 소요되어 전체 프로세스의 성능이 저하될 수 있습니다.
또한 한 작업이 지연되면 다른 모든 작업들도 모두 지연되기 때문에 문제가 발생할 수 있습니다.
비동기(asynchronous)란
비동기는 사전적으로 '동시에 일어나지 않는다'는 의미를 갖고 있습니다.
프로그래밍에서 비동기(asynchronous)란 작업이 순차적으로 진행되지 않는 것을 의미합니다.
즉, 한 작업이 시작되면 해당 작업이 완료될 때까지 기디리지 않고, 다른 작업을 실행합니다.
이러한 특징 때문에 비동기 방식은 주로 I/O 작업이나 네트워크 요청과 같이 시간이 오래 걸리는 작업에 사용됩니다.
이러한 작업을 비동기적으로 처리하면, 프로그램은 작업이 완료되기를 기다리는 동안 다른 작업을 처리할 수 있으므로 전체적인 성능이 향상됩니다.
비동기 방식은 콜백(callback), 프로미스(promise), async/await 등의 메커니즘을 통해 구현될 수 있습니다.
참고 자료
https://jenkov.com/tutorials/java-concurrency/concurrency-vs-parallelism.html
'부스트캠프' 카테고리의 다른 글
네이버 부스트캠프 웹・모바일 9기 챌린지 과정 3주차 회고 (0) | 2024.08.02 |
---|---|
Git 동작 방식 (0) | 2024.07.31 |
네이버 부스트캠프 웹・모바일 9기 챌린지 과정 2주차 회고 (0) | 2024.07.26 |
발행-구독 패턴(Publisher-Subscriber Pattern) (0) | 2024.07.25 |
함수형 프로그래밍 with. Swift (0) | 2024.07.24 |