#010. Process vs Thread

오늘은 프로세스와 스레드에 관해 이해해보려고 합니다.

기본적인 용어를 먼저 정리하자면 다음과 같습니다. 이 중에서도 집중적으로 볼 키워드는 프로세스 입니다. 프로세스는 프로세서 위에서 현재 운영체제 위에 적재되어서 실행되는 프로그램입니다.

프로세스는 다음과 같은 상태들을 가지고 있습니다. 프로세스는 Ready와 Waiting, Running을 왔다갔다 하면서 진행되어집니다.

이렇게 프로세스를 관리하기 위해서 프로세스의 상태와 정보에 관한 단위인 PCB가 만들어지고 사용됩니다.

프로세스가 사용되기 위해서는 메모리 영역에 올릴 Code, Data, Stack, Heap이 필요합니다. 각각의 프로세스는 자기의 Code, Data, Heap 과 그 안의 여러개의 스레드를 가지는데 스레드는 Stack(실행에 필요한 메모리)를 각각 가집니다.

컴퓨터가 하는 멀티태스킹이 동시에 진행되는 것 같지만 사실은 여러 프로세스들이 빠르게 돌아가며 진행되는 과정입니다.

이렇게 프로세스가 빠르게 전환되는 과정에서 Context Switching이 일어납니다. 그런데 워낙 많은 프로세스들이 진행되니 Conext Switching의 과정을 줄이면 효율이 높아질 것이라는 아이디어가 나오게 되어 Process를 또다시 실행하는 단위로 나눈 Thread가 탄생하게 됩니다.

스레드는 단일스레드와 멀티스레드가 있는데, 이 중에서 많이 사용되는 것이 멀티스레드 입니다. 멀티스레드는 Heap, Data, Code를 공유하며 각자 자신만의 Stack을 가지고 Context Switching 과정을 줄입니다.

 

멀티프로세스와 멀티스레드를 비교해보자면 멀티 프로세스는 반복적으로 레지스터와 메모리에 적재와 Switching을 하는 반면 멀티스레딩은 공유하는 자원을 그대로 두기 때문에 훨씬 효율적입니다.

멀티코어는 연산을 처리하는 레지스터가 여러대인 경우로 이 때 L2 캐시를 공유해 같은 자원을 공유할 수 있습니다. 만약 따로따로 진행이 된다면 context switching 비효율이 그대로 발생하겠죠!!

이러한 멀티스레드도 단점이 있는데, 자원을 공유하다보니 에러를 찾기 어렵고 에러도 공유하게 됩니다. 또한 교착상태등이 발생하지 않도록 동기화와 순서 규칙을 잘 정해야합니다.

 

Process vs Thread (2).pdf

0.44MB

[10분 테코톡] 👩‍💻👨‍💻 쪼밀리와 오구의 Process vs Thread

https://www.youtube.com/watch?v=DmZnOg5Ced8 

 

'OS_Linux' 카테고리의 다른 글

#019. Cache  (0) 2021.10.22
  Comments,     Trackbacks