쓰레드의 이해

Timo·2022년 7월 22일
0
post-thumbnail

4.1 Overview

쓰레드란 무엇인가?

  • A thread is a lightweight process.
  • A basic unit of CPU utilization.
    CPU를 점유하는 단위가 스레드가 된다?
    멀티프로세싱에서는 프로세스 아이디(PID) 하나가 CPU를 점유했다면 멀티스레딩 환경에서는 프로세스에 있는 스레드 아이디(TID)가 CPU를 점유한다. (점유하는 최소 단위)

멀티스레딩 환경의 메모리 구조

  • 프로세스 안에서 code, data, files는 같은 것을 공유해도 되지만 registers, stack, Program Counter 정보는 독립적으로 관리해야 함

멀티스레딩 사용 시 장점

  • Responsiveness - 병목이 발생해도 논블록처리 할 수 있음
  • Resource Sharing - 프로세스 안에서 code, data, files 데이터를 공유하므로 굳이 (멀티프로세싱에서 사용하는)shared-memory 같은 영역을 만들지 안아도 됨
  • Economy - 굳이 복제하지 않아도 되는 부분은 공유하므로 메모리 사용이 좀 더 경제적이다. (Ex. 배틀그라운드 코드는 많겠지만, 프로세스 내부에서 공유되므로 메모리 사용 시 멀티프로세싱보다 저렴한 비용을 사용한다.), 컨텍스트 스위칭 비용도 더 저렴하다.
  • Scalability - 확장성. 멀티프로세서 구조에서 병렬 처리까지 가능해진다.

4.4 Thread Library

Threads in Java - 멀티스레드 구현 방법

  • Thread 클래스 상속

  • Runnable 인터페이스 구현, Thread 클래스 생성자 파라미터로 인터페이스 전달

  • Lamba 표현식을 활용한 구현 - 익명 인터페이스 구현
    -> run() 메소드 오버라이딩
    -> 사용 시에는 .start() 메서드 호출

  • join() 메서드 호출로 부모 쓰레드 대기

  • interrupt() 메서드 호출로 쓰레드 종료시키기

4.2 Multicore Programming

Multithreading in a Multicore system.

  • 병렬적으로 진행하게 됨
  • Identifying tasks: 고유한 작업에 대한 분류?
  • Balance: 일감 균형있게 분배
  • Data splitting: 데이터를 쪼개는 것
  • Data dependency: 데이터 독립적
  • Testing and debugging

Types of parallelism

  • data parallelism
  • task parallelism

Amdahl’s Law

  • 코어는 무조건 많을수록 좋은가?
  • 연속적으로 실행해야 하는 코드의 비율에 따라 코어를 아무리 늘려도 크게 효율이 늘지는 않는다.
profile
나는 매일 성장하는 사람

0개의 댓글