운영체제. 멀티 스레드

sanghee·2021년 12월 17일
0
post-thumbnail
post-custom-banner

매주 진행하는 면접스터디에서 아래의 질문들에 대한 정리를 모은 글입니다.
Interview_Question_for_Beginner/OS
프로세스(PROCESS) , 스레드(THREAD) #2

📌멀티 스레딩의 장점?

프로세스를 이용하여 동시에 처리하던 일을 스레드로 구현할 경우 메모리 공간과 시스템 자원 소모가 줄어든다. 스레드 간의 통신이 필요한 경우에도 별도의 자원을 이용하는 것이 아니라 전역 변수의 공간 또는 동적으로 할당된 공간인 Heap 영역을 이용한다. 그렇기 때문에 프로세스 간 통신 방법에 비해 스레드 간의 통신 방법이 훨씬 간단하다. 심지어 스레드의 문맥 교환(Context Switch)은 프로세스와 달리 캐시 메모리를 비울 필요가 없기에 더 빠르다. 이러한 장점때문에 여러 프로세스로 할 수 있는 작업들을 하나의 프로세스에서 여러 스레드로 나눠 수행한다.

메모리 공간

  • 코드 영역(Code): 실행할 프로그램의 코드
  • 데이터 영역(Static, Data): 전역 변수, 정적 변수
  • 힙 영역(Heap): 사용자의 동적 할당. 런타임에 결정됨
  • 스택 영역(Stack): 지역변수, 매개 변수, 컴파일 타임에 크기가 결정됨

컴파일 타임 에러와 런타임 에러의 차이?

컴파일 타임

컴파일 타임이란 소스코드가 기계어코드로 변환되어 실행 가능한 프로그램이 되는 과정을 말한다.

런타임

런타임이란 프로그램이 실행되는 때를 말한다.

멀티 스레드에서의 메모리 공간

스레드는 각자 고유한 스택 영역을 가지고 있다. 이외의 코드, 힙 영역은 공유한다.

📌멀티 스레딩의 문제점

멀티 프로세싱에서는 프로세스 간 공유하는 자원이 없기 때문에 동일한 자원에 동시에 접근할 일이 없다. 반면 멀티 스레딩일때는 서로 다른 스레드가 데이터와 힙 영역을 공유하고 있다. 어떤 스레드가 다른 스레드에서 사용중인 자원에 접근하는 경우가 발생한다.

그렇기에 멀티 스레딩에서는 동기화 작업이 필요하다. 이 작업을 통해 작업 처리 순서를 컨트롤하고 공유 자원에 대한 접근을 컨트롤한다. 하지만 이로 인해 병목현상이 발생하여 성능이 저하될 가능성이 높다. 그러므로 과도한 락으로 인한 병목현상을 줄여야 한다.

병목현상(Bottleneck)

전체 시스템의 성능이나 용량이 하나의 구성 요소로 인헤 제한을 받는 현상을 의미한다. 말 그대로 병의 목이라는 의미이다. 물이 병 밖으로 빠져나갈 때 병의 몸통보다 병의 목이 좁아서 물이 상대적으로 천천히 쏟아지는 것에 비유한 현상이다.

멀티 스레드 vs 멀티 프로세스

📌멀티 스레드

장점

  • 적은 메모리 공간을 차지한다.
  • 새로운 프로세스를 생성하는 것보다 자신이 속한 프로세스에서 스레드를 생성하는 것이 빠르다.
  • 멀티 스레드는 자동적으로 그들이 속한 프로세스의 자원들과 메모리를 공유한다.
  • 문맥 전환이 빠르다.
  • 각각의 스레드가 병렬적으로 수행될 수 있다.

단점

  • 오류로 인해 하나의 스레드가 종료되면 전체 스레드가 종료될 수 있다.
  • 자원 공유 문제(동기화 문제)가 발생한다. 한 프로세스 안에서 실행되는 서로 다른 스레드가 데이터와 힙 영역을 공유하기 때문에 어떤 스레드가 다른 스레드에서 사용 중인 변수나 자료구조에 접근하여 엉뚱한 값을 읽어오거나 수정할 수 있다.
  • 교착 상태에 빠지지 않도록 주의해야 한다.

📌멀티 프로세스

장점

  • 하나의 응용프로그램을 여러 개의 프로세스로 구성하여 각 프로세스가 하나의 작업을 처리하도록 한다.
  • 하나의 프로세스가 죽더라도 다른 프로세스에 영향을 끼지지 않고 정상적으로 수행된다.

단점

  • 많은 메모리 공간과 CPU 시간을 차지한다.
  • 문맥 교환시 캐시에 있는 모든 데이터를 전부 리셋하고 다시 캐시 정보를 불러와야 하므로 많은 오버헤드가 발생한다.
  • 하나의 프로그램에 속하는 프로세스들 사이에서 변수를 공유할 수 없다.

교착 상태(Deadlock)

데드락이란 두개 이상의 작업이 서로 상대방의 작업이 끝나기 만을 기다리고 있어서 결과적으로 아무것도 완료되지 못한 상태를 가리킨다.

profile
👩‍💻
post-custom-banner

0개의 댓글