2023. 12. 15. 20:21 용어 관련

thread란

반응형

우리는 rpgoramming을 하면서 thread라는 말을 자주 듣게 된다.
이번 포스팅에서는 thread란 무엇인지에 대해서 간단하게 알아보자.

thread란 ?
thread는 어떠한 program 내부에서, 특히 process 내에서 실행되는 흐름을 의미한다.
일반적으로 하나의 program은 하나의 process를 생성하지만 하나의 process안에서는 여러개의 thread를 생성, 실행할 수 있다.
이러한 실행 박식을 multithread라고 한다.

process와 thread의 차이
multithread와 multiprocess는 여러 흐름이 동시에 진행된다는 점에선 같다고 볼 수 있다.
(multiprocess : 여러 program이 동시에 실행되는 상태)
다만 multiprocess는 각 process가 독립적으로 실행되며 특정 process가 실행되기 위해선 context switching을 통해 cpu를 점유해야 한다.
반면 multithread의 경우 동일한 process내에서의 작업 흐름이므로 특정 메모리를 공유하며 이로 인해 동일 process내의 다른 thread가 cpu를 점유할 때 context switching이 발생하지 않는다.

multithread의 장점
multithread의 장점은 cpu가 여러개인 환경에서 각각의 thread가 cpu를 하나씩 점유하면 작업 처리 속도가 훨씬 빨라진다는 것이다.

multithread의 단점
다만 multithread의 단점도 여러가지가 존재하는데 우선 특정 thread 간의 실행 순서에 대해서 알수가 없다는 것이다.
간단한 예로 여러 thread가 특정 변수의 값을 1씩 증가시키는 경우 code 상에서는 단 1줄로 변수값을 1증가시키지만, 실제 기계어 레벨에서 살펴본다면 레지스터에 대한 작업 단위로 구분할 수 있고 thread의 cpu점유가 어떻게 되는지에 따라서 변수의 값이 증가하지 않을 수도 있다.
이러한 순서 보장이 안되기 떄문에 여러가지 문제가 발생할 수 있고 이를 해결하기 위한 구현 난이도가 높아진다.

thread의 종류
thread는 해당 thread를 지원하는 주체에 따라서 2가지로 구분된다.

user level thread
사용자 스레드는 kernel 영역 상위의 app영역에서 지원되며 일반적으로는 사용자 라이브러리를 통해서 구현된다.
사용자 라이브러리는 스레드의 생성 및 스케줄링에 대해 관리기능을 제공한다.
동일한 메모리 영역에서 스레드가 생성 및 관리 되므로 속도가 빠른 장점이 있지만, 시스템 호출 등의 요청이 있을 시 다른 스레드들이 유휴상태에 빠지게 되는 단점이 있다.
이는 kernel이 process 내부의 thread를 인식하지 못하기 때문에 process를 대기상태로 전환시키기 때문이다.

kernel level thread
kernel level thread는 OS가 지원하는 thread 기능으로 구현되며, kernel이 thread의 생성, 스케줄링을 담당한다. thread가 system call등으로 중단되더라도, kernel은 process내의 다른 thread를 중단시키지 않고 실행시켜준다.

thread data
thread는 두가지 data가 존재한다. thread자체의 기본 ata는 실행과 관련된 data를 지니며, 자신만의 고유한 thread id, PC(program counter), register, stack을 지닌다.
code, data, file등의 자원은 process의 자원을 사용하며 동일 process하의 다른 thread들과 공유한다.
기본 data외의 특정 thread에만 필요한 정보들이 필요한 경우도 존재하는데,
이러한 data는 (TSD)thread specific data라고 부른다.
예를 들면 각 thread 별로 처리하는 transaction 이 다를 경우 이에 대한 transaction id를 기억해야한다.
그 외의 예로는 TLS(thread local storage) 등등이 있다.

참고-
https://ko.m.wikipedia.org/wiki/%EC%8A%A4%EB%A0%88%EB%93%9C_(%EC%BB%B4%ED%93%A8%ED%8C%85)

반응형

'용어 관련' 카테고리의 다른 글

UUID란  (0) 2023.12.16
Process에 대해서  (0) 2023.12.13
proxy server , reverse proxy server  (0) 2021.07.18
Zero Trust Model  (0) 2021.07.18
DeadLock, Live Lock  (0) 2021.06.20
Posted by Sweetmeats_boy

블로그 이미지
Sweetmeats_boy

태그목록

Yesterday
Today
Total

달력

 « |  » 2024.9
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

최근에 올라온 글

최근에 달린 댓글

최근에 받은 트랙백

글 보관함