[운영체제 공룡책] 4. Thread & Concurrency
반응형
쓰레드의 이해
프로세스의 동작을 확장하여 프로세스 내 단일 스레드가 아닌 멀티 스레드를 구현함
프로세스의 자원을 나눠서 사용하는 것임!
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()
메소드를 overrideRunnable
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
- Thread Pools
- 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가 먼저 출력되었음
반응형
'엔지니어링 > 개발배움터' 카테고리의 다른 글
[운영체제 공룡책] 6. Synchronization Tools (0) | 2022.07.30 |
---|---|
[운영체제 공룡책] 5. CPU Scheduling (0) | 2022.07.24 |
[운영체제 공룡책] 3. Process - 프로세스 간 통신 (IPC, Inter-Process Communication) (0) | 2022.07.08 |
[운영체제 공룡책] 3. Process - 프로세스 이해와 생성 (0) | 2022.07.03 |
[운영체제 공룡책] 1-2 운영체제의 개념과 구조 (0) | 2022.06.26 |
댓글
이 글 공유하기
다른 글
-
[운영체제 공룡책] 6. Synchronization Tools
[운영체제 공룡책] 6. Synchronization Tools
2022.07.30 -
[운영체제 공룡책] 5. CPU Scheduling
[운영체제 공룡책] 5. CPU Scheduling
2022.07.24 -
[운영체제 공룡책] 3. Process - 프로세스 간 통신 (IPC, Inter-Process Communication)
[운영체제 공룡책] 3. Process - 프로세스 간 통신 (IPC, Inter-Process Communication)
2022.07.08 -
[운영체제 공룡책] 3. Process - 프로세스 이해와 생성
[운영체제 공룡책] 3. Process - 프로세스 이해와 생성
2022.07.03