반응형

우선 스레드란 프로세스 내부에서 공통 자원을 토대로 실행되는 가장 작은 작업단위라는 것을 모두 알 것이다.

 

멀티스레드란 한개의 프로세스 내에서 여러 스레드가 동시 다발적으로 작업을 수행하는 것을 의미한다.

 

그렇다면 멀티스레드의 장단점은 무엇일까?

 

우선 장점으로는 크게 응답성, 자원공유, 경제성, 멀티프로세서 활용 이렇게 4가지가 존재한다.

 

대화형 프로그램을 멀티스레드화 하면, 프로그램의 일부 스레드가 지연되더라도 다른 스레드가 여전히 수행된다.

 

예를 들면 웹페이지에서 이미지 로딩중에 다른 작업이 진행되는 경우 등이 응답성 측면에서의 장점에 속한다.

 

자원 공유와 경제성의 경우 같은 프로세스에 속한 스레드는 자원을 공유하기 때문에 context switching 등에서 좀더 비용이 적다는 이점이다.

 

마지막으로 멀티프로세서 활용의 경우 각각의 스레드를 다른 프로세서에서 병렬로 수행이 가능하다는 것이다.

 

단점의 경우는 크게 4가지로 볼수 있다.

첫번째로는 자원공유로 인해 발생하는 단점으로 각각의 스레드가 공유자원에 대해서 서로 간섭하는 경우가 생긴다는 것이다.

 

두번째로는 한개의 스레드만 실행 중인 경우 싱글 스레드와 차이가 없고 오히려 더 지연되는 경우가 생길 수 있다는 것이다.

 

세번째로는 멀티 스레드 적용 시 운영체제를 우선 고려해야 하고 응용프로그램의 경우 멀티 스레드를 고려한 구조로 설계되어야 한다는 것이다.

 

마지막으로는 각 스레드 별 스케줄링에 주의해야 한다는 것이다.

 

 

멀티 스레드 모델

 

멀티 스레드는 크게 3가지 모델로 구분할 수 있다.

1. 다 대 일[Many To one]

Many To one의 경우 여러 유저 스레드들이 한개의 프로세서로 매핑되는 방식이다.

스레드의 관리는 유저 레벨에서 이루어 지며 주로 커널 스레드를 지원하지 않는 시스템에서 사용한다.

다만, 이 경우 한개의 스레드만 커널에 접근 할 수 있다는 단점이 존재한다.

이 단점 때문에 진정한 의미의 동시성이 지원되지 않는다.

 

 

2. 일 대 일[One to One]

One to One의 경우 한개의 스레드를 한개의 프로세서에 한개의 스레드를 매핑 시키는 방법이다.

이 경우 위의 Many To One 모데에서 발생하던 단점인 특정 스레드가 커널 사용시 다른 스레드가 중단되는 단점이 사라진다. 

그러나 커널 스레드도 한정된 자원을 사용하기 때문에 무한정 생성할 수는 없으며 항상 스레드 생성 갯수를 염두해 두어야 한다.

 

 

3. 다 대 다

Many To Many 의 경우 여러개의 유저 스레드를 여러 개의 커널 스레드로 매핑시키는 방법이다.

Many to One, One to One의 단점을 해결하기 위해 고안된 방법이다.

커널 스레드는 생성된 사용자 스레드와 같은 수 또는 그 이하로 생성되어 스케쥴링 한다.

Many to One 방식에서 스레드가 시스템 호출 시 중단 되는 현상, One to One의 스레드 생성 갯수제한에 대해서 고민하지 않아도 된다. 커널에서 유저 스레드와 커널 스레드의 매핑을 조절하기 때문이다.

[출처 : 위키 https://ko.wikipedia.org/wiki/%EB%A9%80%ED%8B%B0%EC%8A%A4%EB%A0%88%EB%94%A9 ]

 

 

 

 

반응형

'기타 상식' 카테고리의 다른 글

게임에서의 랜덤값에 대해서  (0) 2019.09.02
FirebaseMessage 란?  (0) 2019.07.31
ORM이란?  (0) 2019.06.23
LockFree란?  (0) 2017.03.03
메모리 거짓 공유란?  (0) 2017.01.13
Posted by Sweetmeats_boy

블로그 이미지
Sweetmeats_boy

태그목록

Yesterday
Today
Total

달력

 « |  » 2024.12
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 31

최근에 올라온 글

최근에 달린 댓글

최근에 받은 트랙백

글 보관함