Notice
Recent Posts
Recent Comments
Link
«   2024/05   »
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
Archives
Today
Total
관리 메뉴

운기의 블로그

프로세스(PROCESS) , 스레드(THREAD) #2 본문

운영체제

프로세스(PROCESS) , 스레드(THREAD) #2

운띠야 2020. 1. 15. 04:39

스레드란 프로세스가 할당 받는 자원을 이용하는 실행 흐름의 단위로 각각의 스레드에는 프로그램 카운터, 레지스터, 스택, 스레드 ID가 존재하고, 스레드들은 자원(code, data, heap 영역)을 공유하고 있고, 운영체제의 지원여부에 따라 

단일 스레드멀티(다중) 스레드로 나눌 수 있다. 

 

 

단일 스레드 / 멀티 스레드

 

단일 스레드 / 멀티 스레드 (https://www2.cs.uic.edu/~jbell/CourseNotes/OperatingSystems/4_Threads.html) 그림참조

단일 스레드 

  • 하나의 프로세스에서 하나의 스레드 실행
  • 하나의 레지스터와 스택으로 표현

멀티 스레드

  • 프로그램을 다수의 실행 단위로 나누어 실행
  • 프로세스 내에서 자원을 공유하여 자원 생성과 관리의 중복을 최소화
  • 서버가 많은 요청을 효율적으로 수행 할 수 있는 환경 제공
  • 각각의 스레드가 고유의 레지스터와 스택으로 표현됨

 

 

 

멀티 스레드의 장점

프로세스로 동시에 처리하는 것 보다 멀티스레드로 처리할 경우 하나의 프로세스 내에서 code, data, heap 영역의 자원을 공유하며 작동하기에 메모리 공간과 시스템 자원 소모가 줄어들게된다. 그렇기에 프로세스간 통신 방법에 비해 스레드간의 통신 방법이 훨씬 간단하다. 이러한 장점으로 인해 프로그램의 응답시간은 단축되고 다수의 프로세스 대신 하나의 프로세스 안에서 다수의 스레드를 구현하여 사용한다.

 

멀티 스레드의 단점

자원을 공유하기에 자원의 소모를 줄이는 장점이 있지만, 반대로 단점이 될 수도 있다. 하나의 스레드가 공유자원에 있는 자원을 사용하고 있을때 다른 스레드에서 이 자원을 사용한다면, 원래 원하던 값이 아니라 변경된 값을 읽어 오는 경우가 생길 수 도 있다. 이러한 문제를 해결하기 위해 동기화 작업이 필요하다.  동기화 작업은 작업 처리 순서를 조정하고 공유자원에 대한 권한을 컨트롤 해주는 것을 말하는데, 이러한 작업으로 인해 스레드가 작업을 수행할 때 공유자원을 사용할 권한을 기다리게 되면서 병목현상이 발생해 성능을 저하 시킬 수도 있기에 '과도한 락' 으로 병목현상을 줄여줘야한다. 

 


멀티 프로세스를 사용하는 이유

멀테 스레드를 공부하면서 드는 생각은 멀티프로세스는 왜 사용하는가였다.

 

https://you9010.tistory.com/136 [그림참조]

 

문맥교환으로 발생하는 시간소모, 자원도 공유하지 못하고, 멀티프로세스는 부모-자식 관계이지만 각각의 메모리 영역을 가지고 있어 메모리 공간 마저도 더 많이 차지하는데 무조건 멀티스레드를 사용하는게 맞는게 아닌가라는 생각을 가지게 되어서 더 찾아 본 결과, 

 

멀티 프로세스는 멀티 스레드와는 다르게 각각의 메모리 공간을 가지고 있어 하나의 자식프로세스가 문제가 생기더라도 문제가 생긴 자식 프로세스만 죽이면 되고, 다른 프로세스에는 영향을 미치지 않기 때문이다. 스레드의 경우 하나의 스레드에 문제가 생기면 프로세스 전체에 영향을 미치게 되기 때문에 큰 문제를 야기 할 수 도 있다.

 

 

 

그렇기에 관련이 없는 메모장이나 그림판과 같은 상관이 없는 프로그램이라면 각각 독립적인 프로세스를 구현하는것이 바람직하지만 서로 연관이 있는 기능이라면 멀티스레드를 사용하는것이 좋다라고 생각하시면 될거 같습니다.

-- 예시 참조 https://you9010.tistory.com/136 -

 

 


번외

 

프로세스 / 프로세서 / 코어

 

프로세스 : 실행중인 프로그램 ( = 운영체제가 프로그램 + 메모리 할당 후 실행) , 하나이상의 스레드 존재

프로세서 : 간단하게 생각해서 cpu

 

--> 프로세서와 연관되서 프로세스에 대해 설명하자면 "메모리에 적재되어 프로세서에 의해서 실행중인 프로그램"

이라고 설명하는 분들도 계심

 

 

코어 : cpu 안에 연산을 담당하는 핵심적인 요소