동시성과 병렬성의 차이를 구분할 수 있어야지 CPU 바운딩 또는 IO 바운딩 상황에서 소프트웨어를 어떻게 구현해야 성능을 끌어올 수 있는지 판단이 가능하다
화살표는 각 task 가 수행되는 동안의 타임라인
각 영역은 task 가 수행되는 시간을 의미
Case 1 은 concurrently o , simultaneously x
Case 1 은 먼저 시작된 task 가 끝나지 않아도 또 다른 task 를 시작할 수 있다. 즉, 동시성을 만족한다. 하지만 적절하게 시간을 나눠 자원을 interiving 하고 있으므로 물리적으로 정확히 같은 시간대에 동시에 수행되는 것은 아니다. 따라서 병렬성은 만족하지 않는다.
Case 2 는 concurrently o , simultaneously o
Case 2 는 먼저 시작된 task 가 끝나지 않아도 또 다른 task 를 시작할 수 있다. 즉, 동시성을 만족한다. 또한 같은 시간대에 각 task 가 동시에 수행되므로 병렬성을 만족한다.
동시성은 병렬성이기 위한 필요조건이지만 충분조건은 아니다.
Concurrent computing 은 여러 계산이 동시에 실행되는 컴퓨팅의 한 형태이다.
2개 이상의 task(스레드)가 있을 때 서로 다른 task의 실행 시점에 상관없이 task 실행이 가능하다는 의미를 가진다.
싱글 코어에서 멀티 스레드를 동작시키기 위한 방식으로, 멀티 태스킹을 위해 여러 개의 스레드가 번갈아가면서 실행되는 성질을 말한다.
멀티 스레드로 동시성을 만족시킬 수 있는 것이지 동시성과 멀티 스레드는 연관이 없다. 반례로 코틀린은 싱글스레드에서 코루틴을 이용하여 동시성을 만족할 수 있다.
동시에 실행되는 것처럼 보이는 것
→ 싱글 코어에서 멀티 스레드를 이용해 동시성을 구현하는 일부 케이스에 대한 내용이다. 멀티 코어에서 멀티 스레드를 이용하여 동시성을 만족할 경우에는 실제 물리적 시간으로 동시에 실행된다.
Parallel computing 은 많은 계산 또는 프로세스 실행이 동시에 수행되는 계산 유형이다.
2개 이상의 task(스레드)가 있을 때 각 task가 물리적인 시간으로 동시에 실행이 가능하다는 의미를 가진다.
멀티 코어에서 멀티 스레드를 동작시키는 방식으로, 한 개 이상의 스레드를 포함하는 각 코어들이 동시에 실행되는 성질을 말한다.
부분적으로만 맞는 내용이다. 병렬성의 핵심은 물리적인 시간에 동시에 수행되는 것이지 멀티 코어에 포커스가 맞춰져서는 안된다. 그 예로 네트워크 상의 여러 컴퓨터에게 분산작업을 요청하는 분산 컴퓨팅이 있다.
마지막으로 개념을 완전히 이해하는데 도울 수 있도록 몇가지 예제 케이스를 정의한다.
각 task 가 수행되는 시간을 1이라고 가정한다.