What is thread?
- 웹 서버
- 웹 서버는 동시에 많은 클라이언트에게 제공해햐한다.
- 만약 웹 서버가 하나의 입출력 실행만 수행한다면?
- 요청이나 작업이 동시에 여러 개 들어오면 서버는 처리를 완료하기 전에 이전 요청이나 작업을 차단하게 될 것
- 많은 서버 프로세스들은 동시의 서비스에 대한 요구를 받는다.
- 따라서 쓰레드가 필요하다.
- 코드, 데이터, 자원이 공유된다.
- 레지스터 값과 스택은 공유되지 않는다.
Thread
- CPU 이용의 기본 단위
- 각각의 프로세스는 많은 쓰레드를 포함하고 있다.
프로세스의 모든 쓰레드가 공유하는 것
- 코드, 데이터, 힙
- open files, signal handlers
각각의 쓰레드가 고유하게 가지는 것
싱글 쓰레드와 멀티 쓰레드 프로세스

Thread VS. Process
- fork를 사용하여 프로세스를 생성하는 것은 expensive하다.
- 쓰레드는 많은 양의 메모리나 시작 시간을 요구하지 않는다.
- 그래서 때때로 '가벼운 프로세스(lightweight process)'라고 불린다.
- 응답성(Responsiveness)
- 프로세스는 부분이 차단되어도 계속 실행할 수 있다.
- 자원 공유
- 경제성
- 프로세스마다 자원을 할당하면 오버헤드가 발생하는데, 쓰레드를 사용하면 비용이 저렴해지고 문맥 교환이 용이해짐.
- 멀티 프로세서 아키텍처에서의 이용성
Multicore Programming
- 동시성(Concurrency)
- 싱글 코어에서 멀티스레드를 동작시키기 위한 방식으로, 멀티 태스킹을 위해 여러 개의 스레드가 '번갈아가면서' 실행되는 것.
- 병렬성(Parallelism)
- 멀티 코어에서 멀티스레드를 동작시키는 방식으로, 한 개 이상의 스레드를 포함하는 각 코어들이 '동시에' 실행되는 것.

User threads VS. Kernel thread
- 유저 쓰레드
-
유저 레벨 쓰레드 라이브러리에 의해 지원됨
- POSIX pthreads
- Win32 threads
- Java threads
- 커널 쓰레드
-
운영체제에 의해 직접적으로 지원되고 관리됨
- Windows XP/2000
- Solaris
- Linux
- Mac OS X
Linux threads
- clone() 시스템 콜을 사용하여 쓰레드를 생성한다.
- 리눅스는 프로세스와 쓰레드 사이에 구분이 없다.