[OS] 4강

ERror.ASER·2021년 4월 26일
0

OS

목록 보기
5/8
post-thumbnail

Thread

Thread는 프로세스의 작업 흐름을 말한다.

  • 싱글 스레드(Single thread) : 하나의 프로세스가 한번에 하나의 작업만 수행한다.
  • 멀티 스레드(Multi thread) : 하나의 프로세스가 동시에 여러 작업을 수행한다.

프로세스를 여러개 돌리지 않고 스레드로 나눈 이유?

  1. 두 프로세스가 하나의 데이터를 공유하려면 메시지 패싱이나 공유 메모리, 파이프 등을 사용하여야 하는데 효율도 떨어지고 개발자가 구현, 관리하기 번거롭다.
    메시지 패싱, 공유 메모리, 파이프 참고
  2. 프로세스 사이 컨텍스트 스위치가 계속 일어나면 성능 저하가 발생한다. 스레드 전환에도 컨텍스트 스위치가 일어나지만 속도가 더 빠르다.

특징

  • lwp(lightweight process)
  • cpu를 점유하는 가장 기본적인 단위
  • tid, 프로그램 카운터, register set, stack도 thread별로 달라지게 된다.

multithreading

서버와 클라이언트 사이에도 멀티스레드를 구현한다. 클라이언트가 서버에게 요청을 보내면 서버는 새로운 스레드를 하나 생성해 요청을 수행한다. 프로세스를 생성하는 것보다 스레드를 생성하는 것이 더 빠르기 때문이다.

in Java

  1. thread class 상속
  • thread함수 상속 후, run()함수 오버라이드
  • 단점 : 다중 상속이 안된다.

  1. Runnable interface
  • Runnable interface구현 후 run 함수를 오버라이드
  • 클래스를 만들어야 한다. 굳이? 쉬울때도
    제일 많이 쓴다.

  1. Lamda expression
    스레드 코드가 간단한데 굳이 클래스를 만들어야하나?
    익명 쓰레드,
    제일 간단

Thread Library

  1. 부모 쓰레드의 대기 : join
    join을 했기 때문에 기달렸다가 실행시킨다.
  2. 쓰레드의 종료 : interrupt

Multicore Programming

이렇게 멀티코어 또는 멀티프로세서 시스템을 구현할 때는 동시성(Concurrency)와 병렬성(Parallelism)을 알아야 한다.
동시성은 싱글 프로세서 시스템에서 사용되는 방식으로, 프로세서가 여러 개의 스레드를 번갈아가며 수행함으로써 동시에 실행되는 것처럼 보이게 하는 방식이다. 병렬성은 멀티코어 시스템에서 사용되는 방식으로, 여러 개의 코어가 각 스레드를 동시에 수행하는 방식이다.

4개의 thread가 있다고 가정하면 single-core는 threads들이 매시간 interleaving되면서 수행될것이고 multiple-cores는 threads 이 병렬적으로 수행될 것이다.

병렬처리

  1. data parallelism
    데이터를 각각의 core에 쪼개주는 것
  2. task parallelism
    데이터는 하나로 두고 task를 쪼개는 것

Amdahl’s Law

cpu의 코어는 많으면 좋은가?

  • 𝑺: the portion that must be performed serially on a system.
  • 𝑵: the number of processing cores

  • S=0.25,N=2,speedup=1.6
  • S=0.25,N=4,speedup=2.28
    4배 여야 하는데, 2.28배이다~
    0.5는 코어를 아무리 늘려도 상관이 없다.
    많다고 좋은건 아님. 병렬처리 할 수 있는거 아니라면!

profile
지우의 블로그

0개의 댓글