동시성과 병렬성
- 동시성(concurrency)
- 멀티테스킹
- 일을 잘게 분할 한 후 이를 조금씩 번갈아 가면서 처리하는 방식
시간 T0 T1 T2 T3 T4 … T15 일 A0 B0 C0 A1 B1 … C3
- 아주 빨리 번갈아 하면 동시에 처리하는것처럼 보임
- 병렬성(patallelism)
시간 코어0 코어1 코어2 코어3 T0 A0 B0 C0 D0 T1 A1 B1 C1 D1 T2 A2 B2 C2 D2 T3 A3 B3 C3 D3 - 진짜 동시에 여러 개의 일을 처리하는것
동시성 프로그래밍
프로세스와 스레드

- 프로세스
- 프로그램이 메모리 위에 올라가서 실행중인 것
- 코드를 실행할 수 있는 공간
- CPU, 메모리, SSD와 같은 컴퓨터 자원 등
- 프로세스는 최소 하나 이상의 스레드를 가짐. 경우에 따라서 여러 스레드를 가
- 스레드
- 프로세스 안에서 실행하고 있는 작업
- 스레드 : 프로세스의 실행단위
- 데몬 스레드
- 메인 스레드가 종료될 때 자신의 실행 상태와 상관없이 종료되는 서브 스레드
- fork
- 메인스레드가 서브 스레드를 생성하는것
- join
- 모든 스레드가 작업을 마칠때까지 기다리는것을 의미
- 서브루틴(subroutine)
- 함수()를 호출할 때 호출된 함수