티스토리 뷰

Thread & Multi Thread

쓰레드는 한 프로세스 내에서 실행되는 동작(function)의 단위이다. 각 쓰레드는 속해있는 프로세스의 Stack 메모리를 제외한 나머지 memory 영역을 공유할 수 있다.


멀티 쓰레드란, 하나의 프로세스가 동시에 여러 개의 일을 수행할 수 있도록 해주는 것이다. 즉, 하나의 프로세스에서(실행된 하나의 프로그램) 여러 작업을 병렬로 처리하기 위헤서 멀티 쓰레드를 사용한다. 멀티 쓰레드에서는 한 프로세스 내에 여러 개의 thread가 있고, 각 쓰레드들은 Stack 메모리를 제외한 나머지 영역(Code, Data, Heap) 영역을 공유한다.


Stack memory & PC Register

쓰레드가 함수를 호출하기 위해서는 인자 전달, Return Address 저장, 함수 내 지역변수 저장 등을 위한 독립적인 Stack memory 공간을 필요로한다. 이를 위해 쓰레드는 프로세스로부터 Stack memory 영역은 독립적으로 할당받고, Code, Data, Heap 영역은 공유하는 형태를 갖게 된다.


또한, 멀티 쓰레드에서는 각각의 쓰레드마다 PC Register를 가지고 있어야 한다. 그 이유는 한 프로세스 내에서도 쓰레드끼리 context switch가 일어나게 되는데, PC Register에 code address가 저장되어 있어야 하기 떄문이다.



멀티 프로세스와 멀티 쓰레드 비교

멀티 프로세스 대신 멀티 쓰레드로 구현할 경우, 메모리 공간과 시스템 자원 소모가 줄어들게 된다. 또한 프로세스간의 통신(IPC)보다 쓰레드간의 통신 비용이 적기 때문에 통신으로 인한 오버헤드가 적다. 하지만 멀티 쓰레드를 사용할 떄는 쓰레드간 자원을 공유하기 때문에 동기화문제가 발생할 가능성이 존재한다.



정리

Q. 쓰레드에 독립적인 Stack memory 영역이 필요한 이유는?

  • Stack 영역은 함수 호출 시 전달되는 인자, 함수의 Return Address, 함수 내 지역변수 등을 저장하기 위한 memory 영역이다. 쓰레드가 프로세스 내에서 독립적인 기능을 실행한다는 것은 독립적으로 함수를 호출함을 의미한다. 따라서 각 쓰레드가 독립적인 동작을 실행하기 위해서는 각 쓰레드의 Stack memory영역이 독립적(절대 공유 X)이여야 한다.

Q. 프로세스와 쓰레드의 차이가 무엇인가?

  • 프로세스는 운영체제로부터 자원을 할당받는 작업의 단위이고, 쓰레드는 프로세스가 할당 받은 자원을 이용하는 실행의 단위이다. 즉, 프로세스는 실행파일(program)이 memory에 적재되어 CPU를 할당받아 실행되는 것이고, 쓰레드는 한 프로세스내 에서 실행되는 동작의 단위를 말한다.
  • 프로세스는 memory공간에 code, data, heap, stack 영역이 존재하고, 쓰레드는 프로세스 내에서 stack 영역을 제외한 code, data, heap 영역을 공유한다.
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/01   »
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
글 보관함