운영체제

07. 스레드의 이해

syom 2021. 9. 7. 11:12
  • 예전에는 하나의 프로세스 에는 하나의 스레드로 실행되었다
  • 하지만 이제는 하나의 프로세스가 여러개의 스레드를 가질 수 있다

Thread

  • liteweight process (LWP) 라고도 함
  • 멀티 스레드를 지원한다면, CPU 를 점유하는 가장 기본적인 단위가 스레드가 됨

⇒ (pid 가 아니라) tid, program counter, register set, stack 도 스레드 단위

server 에서의 멀티스레딩

  • client → server → thread
  • : client 에서 server 로 큰 리퀘스트를 보내고, 서버는 새 스레드를 만들어서 다음에 올 리퀘스트들을 받을 수 있다.

멀티스레딩의 장점

  1. Responsiveness ( )
  2. : 유저인터페이스를 처리할 때 blocking 할 일 없이 계속해서 실행할 수 있음
  3. Resource Sharing
  4. : 프로세스를 공유하기 때문에 shared-memory 나 message-passing 보다 쉽다
  5. Economy
  6. : 프로세스에 비해 경제적으로 좋다
  7. Scalability (확장성)
  8. : 병렬처리가 가능하다

Thread in JAVA

  • thread 기반이라 생성, 관리가 쉽다
  • 사용하는법
    1. Thread 라는 클래스를 상속받아서 public void run() 메소드 오버라이딩 (하지만 다중상속 불가)
    2. Runnable 이라는 인터페이스에서 클래스를 만들고, public void run() 메소드 오버라이딩 하고, Thread 클래스의 생성자에 넣어주어 사용.
    3. Lamda expression ( 익명 )
    4. : 새로운 클래스를 생성하지 않고 사용
  • 부모 스레드의 대기 : join 을 사용
  • 스레드의 종료 : interrupt

Multicore system 에서의 멀티스레딩

  • concurrency 가 좀 더 좋아진다
    • single-core : 스레드가 시간에 따라 인터리빙 (interleaved : 사이사이에 끼워넣는) 된다
    • multiple-core : 병렬적으로 실행이 된다
  • ⇒ 4개의 스레드가 있는 경우

멀티코어-멀티스레딩의 과제

  1. Identifying task : 어떤 부분이 분리되어서 실행되는지 찾아야 함
  2. Balance : 프로그래머가 분배도 해주어야함
  3. Data spliting
  4. Data dependency
  5. Testing and debugging : 테스트, 디버깅이 어려워짐

병렬 처리의 타입

  • data paralleism : 각각의 데이터 분배
  • task parallelism
  • ⇒ 둘다 요즘엔 안쓰고 요즘엔 분산처리(distributed)로 함

Amdahl's Law (암달의 법칙)

코어는 무조건 많을 수록 좋은가?

  • serially 하게(직렬적으로) 동작해야하는 시스템이 50퍼센트정도 되면 아무리 코어가 많아도 별 차이가 없다

'운영체제' 카테고리의 다른 글

09. CPU 스케줄링  (0) 2021.09.09
08. 멀티스레딩  (0) 2021.09.08
06. 프로세스간 통신의 실제  (0) 2021.09.06
05. 프로세스간 통신  (0) 2021.09.05
04. 프로세스의 생성  (0) 2021.09.04