동시성 과 병렬성
CPU
- 작업이나 연산을 처리하는 기계, 프로세서
- CPU 하나에 하나의 작업만 수행할 수 있다
1. 동시성(Concurrency)
- 하나의 CPU에서 작업을 진행하는 것
- 작업을 작은 단위로 나누고 작은 단위의 작업을 번갈아 가면서 처리
- 동시에 여러 작업을 처리하는 것 처럼 보일 수 있다
- 스케쥴링을 통해 작업을 나눠서 처리
- 하나의 CPU의 성능을 높여 연산량을 증가시킬 수 있다
고민…
- 작업을 어떻게 분배하는가?
- 스레드의 탄생
2. 병렬성(Parallelism)
- CPU를 여러대 연결하여 작업을 물리적으로 병렬화 해서 진행한다
- 작업을 효율적으로 분배해야 효율성이 발휘된다
- 효율적으로 분배하지 않을 경우 오히려 작업 효율성이 떨어질 수 있다
작업 병렬성
- 작업을 병렬화 해서 진행
- CPU에서 각각 다른 작업을 수행
데이터 병렬성
- 동시에 같은 작업을 수행하지만, 작업을 처리하는 데이터가 다르다
고민…
- 병렬성은 하드웨어(멀티코어 갯수)에 의존적이다
- 작업을 분배하거나, 결과를 가져오는 방법에 대한 설계 또한 중요
Process와 Thread
동시성을 위해 고안된 개념
1. Process
- 실행 중인 프로그램
- 운영체제로 부터 자원을 할당받아 프로그램을 실행하는 작업의 최소단위
- 유저레벨 프로세스와 커널(kernel)레벨 프로세스로 분리
특징
- 독립적인 메모리와 주소공간을 할당받는다
- 프로세스간 정보 교환을 위해 별도의 통신 채널(IPC: Inter-Process-Communication)이 필요
- socket, character device, shared memory
- 프로세스 서로가 독립적인 메모리와 주소 공간을 할당받기 때문에 자원의 무결성과 동기화에 대한 고민이 필요없다
- 다만 shared memory같이 메모리를 공유하는 경우에는 필요
2. Thread
- 프로세스 안에서 프로세스가 할당받은 자원을 사용하여 프로그램 명령을 수행하는 최소단위
- 하나의 프로세스에 최소 하나의 스레드가 존재
- 프로세스를 생성하는 비용을 줄이기 위해 고안한 개념
- 프로세스를 생성하는데 비용이 든다
- 작업 할당, IPC 구현, 정보 전달…
- 프로세스를 생성하는데 비용이 든다
특징
- 한 프로세스 내에서 실행의 흐름이나, 주소 공간, 메모리 등 자원을 공유한다
- IPC 같은 통신채널 불필요
- 그러나, 자원의 무결성과 동기화에 대해 처리해야 한다
정리
1.
프로세스는 독립적
스레는 프로세스의 한 부분
2.
프로세스는 스레드 보다 많은 상태 정보
스레드는 프로세스의 상태, 메모리, 자원을 공유
3.
프로세스는 별도의 주소 공간
스드는 프로세스 안에서 주소 공간 공유
4.
프로세스는 IPC를 통해서 자원을 교환
스레드는 프로세스 안에서 자원을 공유
5.
스레드 간의 문맥 교환은 프로세스간 문맥 교환보다 빠르다