Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 평범한 배낭
- 냅색
- 백준 1535
- 백준
- LCS2
- 리스트
- 증가하는 부분수열 2
- 9663
- 2606
- python
- 대소비교
- 알고리즘
- BOJ 2606
- boj 11053
- 파이썬
- 백준_2178
- 12865
- 프로그래머스
- 데카르트 곱
- 가장 긴 증가하는 부분수열
- 미로탐색
- list
- 백준 9252
- 타겟 넘버
- 8-queen
- 백준 2606
- BFS
- dfs
- 백준 12015
- 소수찾기
Archives
- Today
- Total
Devlog_by_0giru
[운영체제] 스레드 본문
- 프로세스와 스레드, 멀티스레딩
프로세스란 프로그램의 실행 코드가 컴파일되어 메모리에 적재된 상태를 말한다.
이는 하나의 스레드 제어로 진행되는 프로그램이라고 볼 수 있다.
스레드는 같은 프로세스에 속한 다른 스레드와 코드, 데이터섹션, 열린 파일이나 신호와 같은 OS자원을 공유한다.
- 스레드란, 작은 규모의 프로세스라고 할 수 있다. (Light Weight Process, LWP)
- 스레드는 CPU 점유의 기본 단위가 된다.
- 스레드는 스레드ID, 프로그램 카운터, 레지스터 셋, 스택으로 이루어진다.
멀티스레딩이란, 하나의 프로세스 내에서 하나가 아닌 여러 스레드가 동작하는 것을 말한다.
- 멀티 스레딩이 왜 필요할까?
하나의 응용 프로그램은 여러가지 역할을 수행할 수 있다. 예를 들어, 웹 브라우저는 이미지를 불러오는 스레드, 네트워크로부터 데이터를 가져오는 스레드, 키보드로부터 입력을 받는 스레드 등 멀티 스레딩을 통해 웹 브라우저를 여러개 열지 않아도 된다.
또, 웹 서버는 클라이언트로부터 웹 페이지나 이미지, 소리 등에 대한 요청을 받는다. 분주한 웹 서버는 한번에 수천개의 클라이언트로부터 요청을 받는데, 웹 서버가 단일 스레드로 동작한다면 한 클라이언트 이후의 수천개의 클라이언트는 해당 요청이 끝날 때 까지 무작정 기다려야 할 것이다.
- 멀티 스레딩의 장점
- 응답성(Responsiveness) : 멀티 스레딩을 이용하면 응용 프로그램이 긴 작업을 실행하더라도 프로그램의 실행이 계속되는 것을 허용함으로서 응답성을 증가시킨다. 한 스레드가 이미지 파일을 불러오는 동안 프로그램은 다른 스레드에서 사용자와 다른 상호작용이 가능하다.
- 자원 공유(Resource Sharing) : 프로세스는 공유 메모리 또는 메시지 전달을 통해 자원을 공유했었다. 이러한 방법은 프로그래머에 의해 명시적으로 제어되어야 했지만, 스레드는 속해있는 프로세스의 자원과 메모리를 공유하기 때문에 번거로움을 줄이고 멀티 스레드를 가질 수 있게 해준다.
- 경제성(Economy) : 프로세스를 생성하기 위해 메모리를 할당하고 자원을 사용하는 것은 비용이 많이 든다. 스레드는 속해있는 프로세스의 자원을 공유하기 때문에 프로세스를 생성할때 발생하는 자원과 오버헤드를 절약할 수 있다.
- 규모 가변성(Scalability) : 확장성. 멀티 스레딩의 이점은 특히 프로세서가 싱글코어가 아닌 멀티코어일 때 더욱 증가한다. 다중 처리기에서는 각각의 코어가 다른 스레드를 처리할 수 있기 때문에 병렬 처리가 가능해진다.
- 멀티스레딩의 문제점
- Identifying Tasks : 어떤 task들이 나뉘어져 병렬처리 될 수 있을 지 판단할 수 있어야 한다.
- Balance : 병렬 처리할 task를 나누는 것 외에도, 나뉘어진 task들이 균등한 작업 기여도를 가질 수 있도록 나눌 수 있어야 한다.
- Data Spliting : 각 데이터들은 각각의 코어에서 처리되도록 나뉘어져야 한다.
- Data Dependency : 나뉘어진 Task들이 접근하는 데이터는 서로간 종속성이 없는지 검토되어야 한다. 종속성이 있는 경우에는 프로그래머가 데이터 종속성을 수용할 수 있도록 태스크의 실행을 적절히 동기화 해야한다.
- Testing & Debugging : 프로그램이 멀티스레딩을 이용해 병렬처리 될 때에는 다양한 실행 경로가 존재할 수 있다. 따라서 이런 프로그램들을 테스트하고 디버깅 하는 것은 단일 스레드 실행보다 훨씬 어렵다.
'[기타]' 카테고리의 다른 글
[운영체제] 프로세스의 통신 (0) | 2021.05.17 |
---|---|
[운영체제] 프로세스 (0) | 2021.05.17 |
Mac OS 패키지 관리자 Homebrew 이용해보기 (0) | 2021.03.11 |