기초지식 (프로세스와 스레드)

hyenam·2021년 10월 5일

Philosophers

목록 보기
1/7

프로세스와 스레드

프로그램은 실행을 시킬수 있는 코드 덩어리 파일이다.
프로세스는 그 프로그램을 실행시키기 위한 것이고
스레드는 프로세스의 코드에 정의된 절차에 따라 실행되는 특정한 수행경로

프로세스

  • 최소 작업 단위
  • 프로세스는 각 독립된 메모리 영역을 가지고 있다.
  • code/Data/stack/heap 형식으로 할당
  • 각 프로세스들은 독립되어 있기때문에 다른 프로세스에 접근을 할 수 가 없다.
    * 기본 개념은 이렇지만 사실 공유는 가능하다.
    1. IPC를 사용하거나 LPC를 사용한다.
    2. 별도로 공유 메모리를 만들어 정보를 주고받도록 설정
    하지만 이 방법들은 자원 부담이 크다.
  • 하나의 프로세스는 하나 이상의 스레드를 가진다.

IPC(Inter-Process Communication)란
프로세스간에 통신을 가능하게 해주는 기술들
공유메모리, 세마포어, 메시지큐, 소켓, 파일 등

LPC(Local inter-Process Communication)란
커널에서 구현된 빠른 속도의 메시지 기반 통신 메커니즘

스레드

  • 스레드는 스레드 간 메모리를 공유한다.
    각자 자기만의 스택 영역을 가지고 있지만
    나머지 영역(코드/데이터/힙)은 공유한다.
    • 공유 영역은 서로 읽고 쓰기 가능하다.

차이

  • 프로세스는 서로 독립되어 있으니 특정 프로세스가 죽는다 하더라도 다른 프로세스에 영향X
  • 그에반해 스레드는 코드/데이터/힙 영역을 공유하고 있기때문에 특정 스레드가 오류가 발생하면 다른 스레드도 전부 강제 종료된다.

마치 코드짜고 컴파일할때 코드하나 오류나면 프로그램이 아예 강제종료되는 것과 같은 것...

멀티태스킹

하나의 운영체제 안에서 여러 프로세스가 실행되는 것

  • 동시에 실행되는 것처럼 보이지만 실제론 그렇지 않음

멀티스레드

하나의 프로세스가 여러작업을 여러 스레드를 사용해 동시에 처리하는 것

  • 멀티스레드를 사용하면 각각의 스레드 중 어떤 것이 어떤 순서로 실행될지 알 수 없음

멀티스레드의 장점

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

멀티스레드의 단점

  • 스레드 하나가 프로세스 내 자원을 망쳐버린다면 모든 프로세스가 종료될 수 있다.
  • 자원을 공유하기 때문에 필연적으로 동기화 문제가 발생할 수밖에 없다.

Context-Switching 이란
현재 진행하고 있는 Task(Process, Thread)의 상태를 저장하고 다음 진행할 Task의 상태 값을 읽어 적용하는 과정

동기화 문제 (Synchronization Issue)

여러 스레드가 함께 전역 변수를 사용할 경우 발생할 수 있는 충돌

예시
멀티스레드를 사용하면 각각의 스레드 중 어떤 것이 어떤 순서로 실행될 지 그 순서를 알 수 없다. 만약 A 스레드가 어떤 자원을 사용하다가 B 스레드로 제어권이 넘어간 후 B 스레드가 해당 자원을 수정했을 때, 다시 제어권을 받은 A 스레드가 해당 자원에 접근하지 못하거나 바뀐 자원에 접근하게 되는 오류가 발생할 수 있다.

프로그래밍할 때 멀티스레드를 사용하려면 신중해야 한다


학습에 참고한 사이트

profile
공부한 걸 정리하고 있습니다.

0개의 댓글