프로세스VS쓰레드

yylog·2022년 8월 7일
0

Q. 프로세스와 쓰레드의 차이에 대해서 말해주세요

프로그램

저장장치 내에 저장되어 있지만, 메모리에는 올라가 있지 않은 정적인 상태

프로세스

프로그램이 실행되고 있는 상태
즉 운영체제가 프로그램에게 독립적인 메모리 공간을 할당해 준 동적인 상태

쓰레드

프로세스 실행 흐름의 일부

출현 배경

프로그램 하나가 단순히 하나의 일을 하지 않는다.
하나의 프로그램에서 음악을 들으면서 게시물을 작성하면서 검색을 할 수 있다고 해보자.
이때 하나의 프로그램에서 위와 같은 여러개의 일을 하기 위해선 여러 프로세스가 필요하다. 하지만 운영체제는 안정성을 위해서 프로세스마다 자신에게 할당된 메모리 내의 정보에만 접근할 수 있도록 제약을 두고 있고, 이를 벗어나는 정보에 접근하려면 오류가 발생한다. 그렇기 때문에 프로세스 하위에 더 작은 실행 개념이 필요하게 되었고 그 개념을 쓰레드라고 한다. 쓰레드는 프로세스 특성의 한계를 해결하기 위해 만들어진 개념이다.

특징

쓰레드는 쓰레드 간 메모리를 공유하며 작동한다. 프로세스 내 쓰레드들끼리 프로세스의 자원을 공유하면서 프로세스 실행 흐름의 일부가 된다.

쓰레드를 코드에 비유하면 선언된 함수들이다. Application 관점에서 main() 함수에서 나열된 구문을 모두 해석하여 수행하면 하나의 thread가 수행된것 이다. 나열 된 구문 중 thread를 fork하는 api가 호출된다면, 기존의 thread는 흘러가고 동시에 또 다른 thread가 만들어져서 2개의 thread가 흘러간다.

프로세스는 각각 독립된 메모리 영역을 Code,Data,Stack,Heap 영역의 형식으로 할당해준다. 이렇게 독립된 메모리 영역을 할당해주기 때문에 각 프로세스는 다른 프로세스의 변수나 자료에 접근할 수 없다. -> 프로세스끼리는 메모리내 자원 공유 안된다.

thread는 프로세스 내에 있기 때문에 thread끼리 자원공유 가능. 한 프로세스 안에 여러개의 thread가 자원을 공유한다. -> 프로세스의 한계를 해결하기위해 만들어진 개념
thread들은 stack은 독립적으로 할당받지만 code,data,heap은 공유자원으로 공유한다.

process와 thread의 차이

한 process를 강제 종료 시킨다고 다른 프로세스에게 영향을 주지 않는다. -> 자원공유를 하지 않으니까!
하지만 쓰레드의 경우 한 메모리 영역을 공유하기 때문에 어떤 스레드 하나에서 오류가 발생한다면 같은 프로세스 내의 다른 스레드 모두가 강제로 종료된다. -> 자원을 공유하니까!

CPU 입장에서 최소 작업 단위

운영체제의 입장에서는 프로세스가 최소 작업 단위

멀티태스킹 VS 멀티쓰레드

멀티태스킹이란 하나의 운영체제 안에서 여러 프로세스가 실행되는것. -> 인터넷도 하고 비쥬얼 스튜디오도 켜고 카카오톡도 켜고 ~
하지만 동시에 실행되는 것 처럼 보이지만 그건 아니다.

멀티스레드는 하나의 프로세스가 여러 작업을 여러 스레드를 사용하여 동시에
처리하는 것 -> 카카오톡 하나의 프로세스가 실행될 때 그 안에 여러개의 멀티쓰레드를 통해 여러개의 작업을 동시에 수행할 수 있다.

멀티스레드의 장점

  1. Context-Switching할 때 공유하고 있는 메모리만큼의 메모리 자원을 아낄 수 있다.
  2. thread는 process 내의 Stack 영역을 제외한 모든 메모리를 공유하기 때문에 통신의 부담이 적어서 응답 시간이 빠르다.

멀티스레드의 단점

  1. thread 하나가 프로세스 내 자원을 망쳐버린다면 모든 프로세스가 종료될 수 있다.
  2. 자원을 공유하기 때문에 동기화 문제가 발생할 수밖에 없다.
  3. 여러 스레드가 전역변수를 같이 사용할 경우 충돌이 발생할 수 있다.
  4. 스케쥴링은 운영체제가 직접해주지 않으므로 프로그래머의 신중한 기법이
    필요하다.

출처
https://velog.io/@raejoonee/%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4%EC%99%80-%EC%8A%A4%EB%A0%88%EB%93%9C%EC%9D%98-%EC%B0%A8%EC%9D%B4

profile
경험하고 공부한 모든 것을 기록하는 공간

0개의 댓글