3. 스레드 라이브러리
- 스레드 구현 두 가지
- 커널의 지원 없이 사용자 공간에서만 라이브러리를 제공하는 것 → 시스템 콜이 아님
- 운영체제에 의해 구현되는 커널 수준의 라이브러리를 구현 → 시스템 콜 맞음
- 동기 스레드와 비동기 스레드
- 동기 스레드 : 부모가 자식이 회수될 때 까지 기다렸다 종료 → 상당한 양의 데이터 공유 수반
- 비동기 스레드 : 부모와 자식의 스레드가 서로 독립적으로 병행하게 실행된다. → 데이터 공유 거의 없음
- 라이브러리
- Pthreads, Windows
- Java 스레드
- Window, Pthreads 와 달리 호스트의 운영체제에서 돌아가는 JVM의 위에서 java 스레드는 돌아간다. → 해당 호스트의 스레드 라이브러리를 사용한다.
- JVM은 하나의 스레드로 하여금 다른 스레드들을 생성한다. → 단일 제어 스레드
- Callable(Runnable의 인터페이스와 달리 반환가능), Executor을 사용한다.
- Callable : 스레드가 수행할 동작 , 반환객체 → Future
- Executor : Task 라는 명시적인 것 대신 Task를 생성하는 스레드를 따로 만들어 실행과 생성을 나눠 병행하도록 해주는 인터페이스