티스토리 뷰
같은 코드를 여러번 실행시켜야 하는 상황이 있다고 하자.
이런 상황에서 프로세스를 여러번 실행 시킬 수도 있지만 프로세스는 한번만 실행시키고 그안에서 여러개의 쓰레드라는 또다른 실행의 끈(?)을 실행시킨다.
프로세스는 운영체제에서 독립적인 주소공간과, 프로세스 테이블에서의 한 엔트리(Process Control block= PCB)를 차지하게 되는데
같은 프로세스를 여러번 실행시키면 계속 주소공간과 PCB를 할당해야 하므로 오버헤드가 매우 커지게 된다.
하지만 한 프로세스 내에서 여러개의 멀티 쓰레드를 사용하면 프로세스를 할당할때보다 더 적은 자원을 사용해서 똑같은 일을 해낼 수 있게된다.
주소 공간이라는것은 위에서 보듯이 code,data,stack부분으로 나뉘게 된다. code부분에는 그 프로세스의 코드가 들어가게 되고 data는 전역변수, stack에는 함수 호출정보 등이 들어가게 되는데 한 프로세스에서 여러개의 쓰레드를 사용하면 프로세스의 code부분을 공유하게 되므로 훨씬 더 라이트하게 같은 일을 실행 시킬 수 있다.
쓰레드는 Stack과 레지스터와 Program Counter값만 가지고 있게 된다. 한 프로세스 내에서 어느 부분을 실행시키고 있었는지에 대한 정보를 저장해야 되기 때문에 PC값이 필요한거고 그 부분을 실행했었을때의 값들을 저장해 놓는 레지스터 및 스택(함수 호출정보)이 필요하므로 Stack이 쓰레드 별로 하나씩 더 필요한것이다.
즉, 프로세스 내에서 같은 부분을 계속해서 실행할때 공유할수 있는 부분들은 최대한 공유해서 오버헤드를 줄이겠다는게 쓰레드의 목적이다.
쓰레드의 좋은 예가 있다.
우리가 포털사이트에 접속을 하게 되면 html문서가 날아오고 그 문서 내부에는 여러가지 이미지 링크들이 있다. 만약에 한 프로세스로 이 모든것들을 처리한다고 하면 이미지를 불러올때 프로세스가 블락 되기 때문에 화면이 뜰때까지 시간이 오래 걸릴 수가 있다. 하지만 이 프로세스 내부에서 여러개의 쓰레드를 실행시켰을때 html문서를 요청하는 쓰레드와 이미지를 요청하는 쓰레드를 따로 나누게 되면 시간이 오래걸리는 이미지 요청 쓰레드는 블럭 될지라고 html문서 요청 쓰레드는 금방 반환이 되므로 사용자 입장에서 화면에 텍스트는 먼저 뜨더라도 이미지는 약간 늦게 뜨게 된다. 그렇게 되면 사용자의 답답함을 조금은 덜 수 있다.(반응성이 좋아진다)
쓰레드를 사용하면 병렬성을 높일 수 있다. -> 다중 cpu에서 해당하는 쓰레드의 장점
엄청 많은 연산을 필요로하는 행렬 곱셈이 있다고 하면 CPU가 있을때 각각의 행과 열을 곱하는것을 각각의 cpu에서 실행시키고 나중에 합쳐서 더 빠르게 결과를 나오게 할 수 있다.
위에서 설명했듯이 쓰레드를 사용하면 반응성(Responsiveness)이 좋아지고
프로세스의 정보를 공유하기(Resource Sharing) 때문에 메모리를 덜 사용해도 되고
프로세스 끼리 context switching 할때보다 쓰레드 끼리 context switching 할때 좀더 라이트하다(ECONOMY)
멀티 cpu 구조의 이용성(Utilization of MP Architectures)
-쓰레드의 병렬 처리
개념만 알자
쓰레드의 구현 방식
커널 쓰레드 - 커널이 프로세스 안에 쓰레드가 여러개 있다는 사실을 알고 관리해줌(커널의 지원 받음)
유저 쓰레드 - 커널은 프로세스의 존재만 알고 쓰레드의 존재를 모르기 때문에 유저 레벨에서 쓰레드를 관리 해주어야 한다.(라이브러리로)
'컴퓨터 공학과 졸업 > 운영체제' 카테고리의 다른 글
메모리 (0) | 2017.12.06 |
---|---|
쓰레드 사용 예 및 구현 방법 (0) | 2017.10.17 |
Scheduling in Interactive Systems - 2 (0) | 2017.10.13 |
Scheduling in Interactive Systems (0) | 2017.10.13 |
Scheduling in Batch System (0) | 2017.10.13 |
- Total
- Today
- Yesterday
- typescript
- atomic design
- async
- rendering scope
- promise
- useRef
- javascript
- state
- reflow
- Polyfill
- props
- react hooks
- es6
- useEffect
- hydrate
- type alias
- reactdom
- Next.js
- return type
- Babel
- webpack
- await
- server side rendering
- storybook
- reducer
- mobx
- react
- Action
- computed
- design system
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |