여러 개의 코어(직관적으로 명령어를 메모리에서 뽑아 해석하고 실행하는 반도체 유닛)에 맞춰 여러 개의 Process, Thread를 돌려 병렬로 작업들을 동시 수행하는 것
(듀얼코어, 쿼드코어, 옥타코어 등등 이런 명칭이 붙는 멀티코어 프로세서가 달린 컴퓨터에서 할 수 있는 방식)
둘 이상의 작업이 동시에 실행되는 것
1개의 코어가 있고 4개의 작업이 있다고 가정하다면,
Process들을 계속 번갈아가면서 조금씩 처리함으로써 마치 Program이 동시에 실행되는 것 처럼 보이는 것
(이때 Process들을 번갈아가면서 매우 빠르게 처리하기 때문에 동시에 실행되는 것처럼 보인다)
번갈아가면서 실행할 때
작업들을 아주 잘게 나누어 아주 조금씩만 작업을 수행하고, 다음 작업으로 넘어가는 식으로 동작된다.
여러 작업을 동시에 처리하는 것처럼 보이게 만들어, 사용자에게 더 빠른 반응성을 제공하기 위해서
이렇게 진행 중인 작업들을 A → B → C → D 로 번갈아 바꾸는 것을 Context Switching 이라고 부른다.
Parallelism 가 물리적으로 정말로 동시에 실행하는 것이라고 하면,
Concurrency 는 동시에 실행하는 것처럼 보이게 하는 것으로 이해하면 된다.
CPU 발열 때문에, 단순한 클럭으로 성능을 올리기에는 한계가 있다.
따라서, 코어의 성능을 올리는 대신 코어를 여러개 탑재하여 쿼드 코어, 옥타 코어 CPU들을 출시하고 있다.
그러나, 아무리 코어를 많이 넣어도 수십개의 코어를 넣은순 없기에 결국 하드웨어적 제한이 걸리게 되고
수십수백개의 Process를 돌리기 위해선 결국 동시성이 필요한 것이다.
4코어 8스레드의 CPU 환경에서 현재 총 16개의 작업이 있다고 가정 해보자.
그 중 8개는 오래 걸리는 작업이고, 나머지 8개는 짧은 시간을 필요로 하는 작업이다.
최대 8개까지 동시에 실행 할 수 있는데, 만약 8개의 오래 걸리는 작업이 먼저 동시에 처리되기 시작했다면
가벼운 8개의 작업은 처리하는데 짧은 시간이 걸림에도 불구하고, 현재 처리중인 8개의 작업이 다 끝날때 까지 기다려야 할 것이다.
따라서, 이러한 비효율적인 면을 극복하기 위해 작업을 아주 잘게 나눠 번갈아 가면서 처리하는 동시성 개념을 채택한 것이다.