- 예전에는 하나의 프로세스 에는 하나의 스레드로 실행되었다
- 하지만 이제는 하나의 프로세스가 여러개의 스레드를 가질 수 있다
Thread
- liteweight process (LWP) 라고도 함
- 멀티 스레드를 지원한다면, CPU 를 점유하는 가장 기본적인 단위가 스레드가 됨
⇒ (pid 가 아니라) tid, program counter, register set, stack 도 스레드 단위
server 에서의 멀티스레딩
- client → server → thread
- : client 에서 server 로 큰 리퀘스트를 보내고, 서버는 새 스레드를 만들어서 다음에 올 리퀘스트들을 받을 수 있다.
멀티스레딩의 장점
- Responsiveness ( )
- : 유저인터페이스를 처리할 때 blocking 할 일 없이 계속해서 실행할 수 있음
- Resource Sharing
- : 프로세스를 공유하기 때문에 shared-memory 나 message-passing 보다 쉽다
- Economy
- : 프로세스에 비해 경제적으로 좋다
- Scalability (확장성)
- : 병렬처리가 가능하다
Thread in JAVA
- thread 기반이라 생성, 관리가 쉽다
- 사용하는법
- Thread 라는 클래스를 상속받아서 public void run() 메소드 오버라이딩 (하지만 다중상속 불가)
- Runnable 이라는 인터페이스에서 클래스를 만들고, public void run() 메소드 오버라이딩 하고, Thread 클래스의 생성자에 넣어주어 사용.
- Lamda expression ( 익명 )
- : 새로운 클래스를 생성하지 않고 사용
- 부모 스레드의 대기 : join 을 사용
- 스레드의 종료 : interrupt
Multicore system 에서의 멀티스레딩
- concurrency 가 좀 더 좋아진다
- single-core : 스레드가 시간에 따라 인터리빙 (interleaved : 사이사이에 끼워넣는) 된다
- multiple-core : 병렬적으로 실행이 된다
- ⇒ 4개의 스레드가 있는 경우
멀티코어-멀티스레딩의 과제
- Identifying task : 어떤 부분이 분리되어서 실행되는지 찾아야 함
- Balance : 프로그래머가 분배도 해주어야함
- Data spliting
- Data dependency
- Testing and debugging : 테스트, 디버깅이 어려워짐
병렬 처리의 타입
- data paralleism : 각각의 데이터 분배
- task parallelism
- ⇒ 둘다 요즘엔 안쓰고 요즘엔 분산처리(distributed)로 함
Amdahl's Law (암달의 법칙)
코어는 무조건 많을 수록 좋은가?
- serially 하게(직렬적으로) 동작해야하는 시스템이 50퍼센트정도 되면 아무리 코어가 많아도 별 차이가 없다
'운영체제' 카테고리의 다른 글
09. CPU 스케줄링 (0) | 2021.09.09 |
---|---|
08. 멀티스레딩 (0) | 2021.09.08 |
06. 프로세스간 통신의 실제 (0) | 2021.09.06 |
05. 프로세스간 통신 (0) | 2021.09.05 |
04. 프로세스의 생성 (0) | 2021.09.04 |