병행성
- 병행성이란?
- 하나의 프로그램이 여러 쓰레드(Thread)를 통해 동시에 여러 작업을 수행하는 것처럼 보이게 만드는 실행 모델
Thread 개념
- 프로세스를 위한 새로운 개념
- multi-threaded program
- 여러 개의 실행 흐름을 가지는 프로그램
- 여러 개의 PC 값을 동시에 유지
- 하나의 주소 공간을 공유
- 쓰레드가 따로 가지는 것
- registers
- stack(스택이 여러개인 것이 중요)
- 같이 공유하는 것
- 독립된 실행 흐름
- 상태 전이 : ready, running, blocking
- 하나의 cpu에서는 한 번에 하나의 쓰레드씩 실행
- pc 및 레지스터를 독자적으로 유지 - 별도의 context
- TCB (thread control block)에 관리 정보 유지
- OS가 실행 쓰레드 교체 시 문맥 교환

- 스택의 크기가 제약이 있음
- 스택의 크기에 제약이 있는 이유
- 메모리 공간이 한정되어 있기 때문
- 스택은 보정 고정 크기로 할당
- 오류 방지 (무한 재귀)
- 장점
- 빠른 생성
- 병렬 처리에 적합 (divide and conquer, 분산 시스템)
- 처리와 대기 분리하여 효율 증대 (웹 서버, GUI)
- 데이터 공유
Pthread API를 이용한 쓰레드 생성
- pthread.h에 있음
- pthread_create(&p1, NULL, mythread, “A”); //쓰레드, 옵션, 함수, 인자

- 3개의 쓰레드 : main, Thread1, Thread2
- 스케줄링 순서 : 스케줄러 마음대로… 이것도 프로세스와 마찬가지
병행성 문제 : 공유 데이터 접근(Shared Data)