반응형

쓰레드의 이해

프로세스의 동작을 확장하여 프로세스 내 단일 스레드가 아닌 멀티 스레드를 구현함
프로세스의 자원을 나눠서 사용하는 것임!

4.1 Overview

  • thread
    • a lightweight process
    • 최소 CPU 점유 단위
    • thread ID, PC, 레지스터들, stack
  • 멀티쓰레딩(multithreading)의 장점
    • Responsiveness : 어떤 UI 처리 시 블록킹을 하지 않고 지속적으로 처리 가능함
    • Resource Sharing : 스레드들은 프로세스 내 자원을 공유함. shared-memory나 message-passing 방법 보다 통신 비용이 저렴하다
    • Economy : 프로세스 하나 생성하는 비용보다 저렴하고, PCB를 옮겨 content switcing하는 것 보다 thread를 스위칭하는 게 더 저렴
    • Scalability : 확장성이 좋음. process can take advantage of multiprocessor architectures
    • [교수님 첨언] 멀티쓰레딩을 배우려고 멀티프로세씽을 사전에 배웠다고 해도 무방할정도로 멀티쓰레딩 중요

4.4 Thread Library

  • Threads in Java
    • JVM 설계 때부터 thread를 고려했기 때문에 쓰레드 관련 작업이 편함
  • 자바에서 스레드 사용방법
    • Thread class를 상속받아서 public void run() 메소드를 override
    • Runnable interface를 implementing해서 public void run() 메소드 override
    • 익명함수(Lambda 표현식)을 이용하여 Runnable 를 대체하자!
    • 부모 쓰레드를 wait 시키려면 join() 을 사용!
    • 쓰레드를 종료 시키려면 interrupt() 을 사용 (stop()은 동기화문제 있음)

4.2 Multicore Programming

  • Multithreading in a Multicore system
    • multicore를 사용하면서 concurrency가 더욱 성능이 좋아짐
    • 4개의 thread를 고려해보았을때
      • single-core : 시간에 따라서 interleaved(인터리빙) 해야함
      • muliple-core : 병렬적(parallel)하게 시행될 수 있음
  • Multicore system에서의 프로그래밍 도전지점
    • Identifying tasks : 어떤 부분들이 별도의 테스크로 분리되어 실행될 수 있는 지 찾아내야함
    • Balance : 적당히 작업을 나눠야함. ensure the tasks to perform equal work of equal value.
    • Data splitting : 별도의 core에서 실행될 수 있는 data를 잘 나눠야함. data also must be divided to run on separate cores.
    • Data dependency : 동기화. nsure that the execution of tasks is synchronized to
      accommodate the data dependency
    • Testing and debugging : 싱글 스레드보다 테스트하고 디버깅하는 게 더 어려워짐
  • parallelism의 두 가지 방법 (지금은 분산 시스템이라 이 두가지 방법을 구분할 이유가 없어지긴 함)
    • data parallelism
    • task parallelism
  • Amdahl’s Law
    • 코어가 많다고 수만큼 비례하여 좋아지지는 않는다~

멀티쓰레딩

4.3 Multithreading Models

  • 두 가지 타입의 쓰레드
    • user threads : JAVA도 운영체제의 쓰레드와 무관한 green thread 썼는데, 최근엔 OS의 스레드를 이용한 native thread를 사용. 사용자 모드에서 사용하는 쓰레드. 커널 위에서
    • kernel threads : 운영체제 쓰레드~
  • 유저 스레드와 커널 스레드와의 관계
    • Many to One : 커널 1개에 여러 개의 유저 스레드
    • One to One : 1:1로 하다가 모자르면 여러개의 유저 스레드로 나뉨~
    • Many to Many : 한정된 N개의 커널 스레드를 받아서 사용하고 반납, 사용하고 반납함 (스레드 풀링 느낌이다)

4.4 Thread Libraries

  • 4.11 pthread
  • 4.17 몇 개의 프로세스, 몇 개의 스레드가 생성되는가?
  • 4.19 스레드 간의 전역변수 공유

4.5 Implicit Treading

  • Java - Executor (여기서 다루진 않음)
  • Implicit Threading의 전략
    • concurrent(시분할하여 동시에 도는 것 처럼 동작)과 parallel한 application을 디자인 하는 것은 multicore 환경에서 multithreading을 디자인하는 것과 같다 = 개발자들에게 겁내 어렵다
    • 이런 복잡한 작업을 compiler(ex:openMP)나 run-time libraries(ex:java.net.concurrent.* 패키지)로 위임
  • Implicit Threading 의 4가지 테크닉
    • Thread Pools
      • 여러 개의 스레드를 미리 생성하여 풀에 저장해두고, 필요할 때마다 풀에서 꺼내서 사용
      • create a number of threads in a pool where they await work
    • Fork & Join(wait)
      • explict(명시적)하게 스레딩을 했었는데, 이걸 implicit(암묵적)하게 스레딩 할 수 있는 방법이 제공됨
      • 교재 4.5.2(p197)에 설명되어있고, 이번 강의에서 자세히 다루지 않음
      • explicit threading, but an excellent candidate for implicit threading
    • OpenMP
      • 컴파일러 지시어를 줘서 C/C++에서 쉽게 병렬처리 가능하도록 지원함
      • a set of compiler directives and an API for programs written in C/C++
    • Grand Central Dispatch (GCD)
      • developed by Apple for its macOS and iOS operating system
  • OpenMP
    • 병렬 처리를 하고 싶은 부분을 지정해주면 그 코드 블락을 알아서 병렬적(parallel)하게 실행
    • 컴파일러에게 지시를 함
    • OpenMP 런타임 라이브러리가 그 부분을 병렬 처리함
    • 근데 영어단어 알아야할 것 같아서 영문도 그대로 첨부
      • identifies parallel regions as blocks of code that may run in parallel.
      • insert compiler directives into source code at parallel regions
      • these directives instruct OpenMP runtime library to execute the region
        in parallel

퀴즈

틀린 것만 정리

정답은 1번
내 생각에는 C가 나중에 실행될 줄 알았는데, 아직 context switch가 발생하지 않았는지 혹은 js의 setTimeout() 처럼 새로운 스레드가 실행되기까지 시간이 좀 걸리는 지 C가 먼저 출력되었음

반응형