멀티스레드
하나의 프로세스에서 여러개의 실행 흐름을 만드는 것
병목현상(렉)을 해결할 수 있는 방안이 될 수 있다.
싱글스레드는 직렬 멀티스레드는 병렬
운영체제에서 스레드 실행순서를 스레드 스케줄러라고 부른다.
멀티스레드에서 한 작업을 하다가 다른작업으로 넘어가는것을 컨텍스트 스위칭이라고 부른다.
CPU에서 ALU가 있는데 연산을 담당하는 장치이다.
코어마다 ALU가 들어가있는데 저장하기위한 임시 레지스터등 여러 부속품이 합쳐져서 CPU가 만들어진다.
ex) 쿼드코어 - 4개의 작업을 동시에 작업이 가능하다.
코어마다 스레드를 물려주는것은 운영체제가 알아서 해준다.
멀티스레드 Critical
메모리를 공유하는것 (동시에 접근)
한곳에서 ++을하는데 다른곳에서 --을 하다보면 데이터가 꼬인다.
그것을 방지하지위해서 스레드 동기화 기법을 이용해서 스레드의 실행흐름을 개입을 한다.
동기화 기법 (락, 언락)
원하는 구간을 잠그는 기능
이 구간을 사용하기 위해 잠겨져있지 않아야한다.
실행흐름을 어느정도 컨트롤할수있게끔 해주는 기법
스레드 동기화 기법
커널모드
유저모드
커널의 힘을 빌리지 않는 동기화 기법이다.
동기화를 위해 커널로의 전환이 불가능하기에 성능상 이점은 있지만 기능은 커널모드에 비해선 빈약하다.
Critical section 임계 영역 유저모드
공유 리소스에 대해 오직 하나의 스레드 접근만 허용한다. (다른 프로세스 접근 불가능)
일반적인 동기화 객체보다 빠르고 효율적이다.
mutex
공유 리소스에 대해 오직 하나의 접근만 허용한다. (다른 프로세스 접근 가능)
ex) 화장실이 하나밖에 없는 식당. 화장실을 가기위해서는 열쇠를 가져가야하는곳
열쇠를 누군가 가져갔다면 줄때까지 대기해야한다.
semaphore
한정된 개수의 자원을 여러 스레드가 사용하려고 할 때 접근을 제한한다.
ex) 화장실이 여러개있는 식당, 입구에는 빈칸갯수를 보여주는 전광판이 있다.
사용하기위해선 빈칸갯수가 1개 이상이라면 하나를 뺀 다음 화장실 입장 나올땐 하나를 더하기
만약 0이된다면 들어가려는 사람이 있다면 다른 사람이 나올때까지 대기
event
특정 사건 발생을 다른 스레드에 알린다.
'공부' 카테고리의 다른 글
| C++ Cast (0) | 2022.07.02 |
|---|---|
| Select모델 WSAEvectSelect모델 Overlapped모델 정리 (0) | 2022.01.10 |
| 컴파일러 과정 (0) | 2021.08.25 |
| (C++) 가상함수 (0) | 2021.08.25 |
| (C++) 얕은 복사 깊은 복사 (0) | 2021.08.25 |