CS/OS
[운영체제] Thread & Concurrency
이수밈
2024. 1. 8. 21:37
1. 멀티스레드
- 스레드는 light-weight process
- CPU의 기초단위이기도 하다
- 스레드의 구성 : thread ID(tid), program counter, register set, stack으로 구성된다.
- program counter, register set, stack은 스레드 별로 별도로 관리해야 한다. (thread of control)
2. 멀티스레드의 장점
- 반응성 : 연속적인 실행이 가능하다.
- 자원 공유
- 경제성 : context switching, process creation 보다 비용이 적음
- 확장성 : 병렬처리 가능
3. 자바에서의 스레드
- Thread class를 상속받기
- main 함수 : thread.start() 호출
- thread.sleep(500);
- Runnable interface를 implement 하기
- public void run()
- Thread thread = new Thread(new MyThread());
- Runnable Lambda 표현법 : 익명 스레드
- Runnable task = () -> {표현}
4. 스레드의 동작
- 부모 스레드의 대기 : process 에서는 wait, 스레드에서는 join 이라고 한다.
- 스레드의 종료 : process에서는 stop, 스레드에서는 interrupt
5. Multicore Programming
- 멀티스레딩은 멀티코어 시스템 : concurrency 가 향상된다.
- single core system + concurrent execution & multicore system + parallel execution
- Amdahl's Law
- 컴퓨터 시스템의 일부를 개선할 때 전체적으로 얼마만큼의 최대 성능 향상이 있는지 계산하는 데 사용된다.
- 코어가 무조건 많을수록 조은가?
- 스레드의 두 종류
- user threads : user mode 위에서 스레딩
- kernel threads : os가 직접 관리하는 스레딩
6. Thread Library
- 스레드 라이브러리 기능
- 스레드를 만들고 관리하는 API
- Pthreads, Windows thread, Java thread (JVM)
7. Implicit Threading - 암묵적 스레딩
- concurrent application
- parallel application
- 위 두개는 어렵기 때문에, java.concurrent.* 패키지에서 라이브러리를 제공하고 있다.
- Thread pools
- 작업 대기 중인 스레드들을 생성
- Fork & Join
- explicit, implicit 방법 둘 다 가능
- OpenMP
- 컴파일러 지시 (이전에는 라이브러리한테 일을 다시켰다)
- 병렬 프로그래밍을 할 수 있도록 도움을 준다.
- Grand Central Dispatch (GCD)
- macOS 및 iOS 운영체제를 위해 애플에서 개발한 기술
- 스레딩에 대한 대부분의 세부사항 관리