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 운영체제를 위해 애플에서 개발한 기술
    • 스레딩에 대한 대부분의 세부사항 관리