ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [OS] 멀티스레드 개념 (동시성 vs 병렬성)
    운영체제 2020. 11. 27. 20:40
    728x90

    Thread

    스레드 : 프로세스 내의 제어 흐름 : CPU 이용의 기본 단위

    동일 프로세스의 여러 스레드는 CODE, DATA 영역과 운영체제 자원(파일, 시그널 등)을 공유

    하지만 Heap과 Stack 은 공유하지 않음

    Multithreading

    하나의 프로세스에서도 여러 개의 스레드를 통해 병렬적으로 작업을 처리할 수 있음

    장점

    • Responsiveness : 응답성의 향상

    • Resource Sharing : 프로세스가 리소스를 공유하는 비용보다 훨씬 적은 비용으로 스레드 간의 리소스 공유가 가능

    • Economy : 프로세스 생성 비용보다 더 저렴한 비용으로 스레드 생성 가능 + context switching 또한 스레드 간의 스위칭이 더 저렴함

    • Scalability : multiprocessor 아키텍쳐에서 높은 성능

    Multicore(Multiprocessor) Programming

    프로그래머가 신경써야 할 점

    • Task 를 잘 쪼갤 것

    • 코어별로 균등하게 일을 배분할 것

    • 데이터를 잘 쪼갤 것

    • 데이터간의 의존성을 최소화할 것

    • 테스트와 디버깅

    Parallelism (병렬성)

    실제 코어가 여러 개여서 여러 작업들을 동시에 처리하는 것

    • Data parallelism : GPU에서의 작업처럼 작업은 동일하나 데이터만 나누는 것

    • Task parallelism : 작업 자체를 나누어서 처리하는 것

    Concurrency (동시성, 병행성)

    실제 코어는 하나이지만 하나의 코어가 여러 작업을 빠르게 번갈아가면서 수행하여 마치 동시에 수행되는 것처럼 보이게 하는 것

    Amdahl’s Law (암달의 법칙)

    코어가 N배로 늘어나더라도 성능이 N배로 늘어나지 않고, 암달의 법칙만큼만 늘어남

    프로그램을 짤 때 프로그램의 모든 부분을 parallel 하게 짤 수 없기에 이런 현상이 발생함. (반드시 Sequential 하게 동작해야 하는 부분들이 존재)

     

    S = Sequential 하게 동작해야 하는 코드의 비율   0 <= S <= 1

    speed_up <= 1 / (S + (1-S) / N)

     

    암달의 법칙에 의하면 코어가 1개에서 8개로 늘어도 성능은 2배 정도 밖에 오르지 않음

     

    댓글

Designed by Tistory.