overview

- multithreaded programming 장점
- Responsiveness : nonblock으로 execution 계속 실행
- Resource Sharing : data영역이 공유되므로, shared memory or msg-passing이 쉽다.
- Economy : 프로세스 복제가 필요없이, 안에서 thread-switching 등 쓰레드를 여러개 쓰는게 훨씬 쉽다.
- Scalability : multiprocessor architectures 등 확장성이 굉장히 좋다.
- java에서의 thread 사용법
- Thread 상속, Thread implement(가장 많이 쓰임), Runnable 람다 표현식 사용
Multicore Programming - 4.2
- Multithreading in a Multicore system
- single-core : interleaved
- multi-core : parallel
- Challenges in a Multicore systems
- Identifying tasks : 업무를 명확하게 부여해야함
- Balance : 쓰레드마다 비슷한 부하
- Data splitting : data가 잘 나누어져함
- Data dependency : data 동기화가 잘 이루어져야함
- Testing and debugging : single thread보다 어렵다
- Type of parallelism
- data parallelism, task parallelism → 분산 시스템 등으로 인해 중요하진 않다.
- Amdahl's Law
- Serial한 문제는 쓰레드가 많아도 도움이 안된다.
Multithreading Models - 4.3
- User threads
- 사용자 모드에서 사용, 커널의 서포트가 없다.
- Kernel threads
- 커널 모드에서 사용, 운영체제가 직접 관리한다.
- 유저 쓰레드와 N:M 관계(N≤M)
Thread Libraries - 4.4
- Pthreads - linux
- fork를 통해 만든 프로세스는 변수 공유x, thread에서는 공유o
Implicit Threading - 4.5
- concurrent and parallel application design이 어렵다
- 멀티코어 시스템에서 멀티쓰레딩을 해야함
- 컴파일러(open-api), libraries(java.concurrent) 사용
- Thread Pools
- threads를 Pool 안에 만들어놓고, 프로세스에서 필요한 만큼 가져가고 돌려놓음.
- Fork & Join
- explicit threading이지만, implicit하게 사용 할 수 있음
- OpenMP
- compiler directives로 쉽게 사용 in c/c++
- 특정 부분을 parallel으로 처리하라고 directive해주면, 그 부분을 병렬처리 → 순서는 계속 바뀜