Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[20210803] 프로세스, 스레드 정리 #191

Open
JuHyun419 opened this issue Aug 3, 2021 · 0 comments
Open

[20210803] 프로세스, 스레드 정리 #191

JuHyun419 opened this issue Aug 3, 2021 · 0 comments
Labels
CS Computer-Science

Comments

@JuHyun419
Copy link
Owner

JuHyun419 commented Aug 3, 2021

📝 프로세스(Process)와 스레드(Thread)

프로세스(Process)

  • 프로세스는 컴퓨터에서 연속적으로 실행되고 있는 컴퓨터 프로그램을 의미함
  • 운영체제로부터 시스템 자원을 할당받는 작업의 단위
    • 프로그램: 어떠한 작업을 하기 위해 실행할 수 있는 파일 또는 프로그램
    • 프로세스: 프로그램을 구동하여 프로그램 상태가 메모리 상에서 실행되는 작업 단위
      • ex) 하나의 프로그램을 여러 번 구동하면 여러 개의 프로세스가 메모리 상에서 실행
  • 프로세스라는 용어는 작업, task, job 등으로 혼용으로 사용하기도 함

image
macOS 운영체제에서 실행되고 있는 프로세스 목록


image

코드(Code) 영역
  - 실행할 프로그램의 코드 및 매크로 상수 기계어 형태로 저장되는 영역
  - CPUCode영역에 저장된 명령어를 하나씩 처리함

        
데이터(Data) 영역
  - 코드에서 선언한 전역 변수와 정적(static) 변수 저장되는 영역
  - 데이터 영역은 프로그램의 시작과 함께 할당되어 종료될 때 소멸
static int ROW = 10;


스택(Stack) 영역
  - 함수 내에서 선언된 지역변수, 매개변수, 리턴값 등이 저장되는 영역
  - 함수 호출시 기록하고 함수의 종료와 함께 제거됨
private void test() {
    int v1 = 20;
    if (v1 == 20) {
        int v2 = 100;
        String str = "abc";
    }
}


힙(Heap) 영역
  - 관리 능한 데이터 외의 다른 형태의 데이터를 관리하기 위한 공간
  - 동적 메모리 할당 공간으로 사용이 끝나면 운영체제 사용할 수 있도록 반납해야 함(GC)
  - 동적 메모리 할당은 어느 시점에 어느 정도의 공간을 할당할 수 있을지 정확히 예측할 수 없고, 런타임에 확인 int[] arr = new int[5];
List<Integer> list = new ArrayList<>();
  • 프로세스는 각각 독립된 메모리 영역(Code, Data, Stack, Heap)을 할당 받음
  • 기본적으로 프로세스당 최소 1개의 스레드(메인 스레드)를 가지고 있음
  • 각 프로세스는 별도의 주소 공간에서 실행되며, 서로 다른 프로세스간의 변수나 자료구조에 접근할 수 없음

멀티 프로세스(Multi Process)

  • 하나의 애플리케이션을 여러 개의 프로세스로 구성하여 각 프로세스가 하나의 작업을 처리하는 과정

장점

  • 여러 개의 프로세스 중 하나의 프로세스에 문제가 발생하더라도 다른 프로세스에 영향이 가지 않음
  • 각 프로세스들이 독립적으로 동작하며 자원이 서로 다르게 할당됨
  • 구현이 비교적 간단함

단점

  • 메모리 사용량이 많음
  • *Context Switching과정에서 캐쉬 메모리 초기화 등 무거운 작업이 실행되고, 많은 시간이 소모되는 오버헤드 발생
*Context Switching: CPU는 한 번에 한 개의 일만 처리가 가능한데, 동시가 아닌 재빠르게 프로세스들을 번갈아가며 실행하고 관리함
실제 프로세스들은 동시에 작업을 하는 것 처럼 보이지만, 상상 이상으로 빠른 CPU로 인해 프로세스들을 번갈아가며 실행한다.
이를 *Context Switching 이라고 한다.

즉 Context Switching란? CPU에서 여러 프로세스들을 번갈아가며 작업을 처리하는 과정
1) 동작 중인 프로세스가 대기를 하면서 해당 프로세스의 상태(Context)를 보관하고
2) 대기중인 다음 순서의 프로세스가 동작하면서 이전에 보관했던 프로세스의 상태를 복구하는 작업

스레드(Thread)

  • 프로그램(프로세스) 내에서 실행되는 흐름의 단위
  • 프로세스가 할당받은 자원을 이용하는 실행의 단위
  • 프로그램은 둘 이상의 스레드를 동시에 실행할 수 있음(멀티스레드)

image

  • 스레드는 프로세스 내에서 Stack만 따로 할당을 받고, Code, Data, Heap 영역은 공유함
  • 스레드는 한 프로세스 내에서 동작되는 여러 실행 흐름으로, 프로세스 내의 주소공간이나 자원(Code, Data, Heap)을 공유
  • 같은 프로세스에 있는 여러 스레드들은 같은 Heap 공간을 공유하는 반면 프로세스는 다른 프로세스의 메모리에 접근할 수 없음

멀티 스레드(Multi Thread)

  • 하나의 애플리케이션을 여러 스레드로 구성하여 하나의 스레드가 하나의 작업을 처리하도록 하는 과정
  • 윈도우나 리눅스 등의 많은 OS에서 멀티 스레딩을 기본으로 하고있음

장점

  • 시스템 자원 소모(자원 효율성 증가)
    • 프로세스와는 달리 메모리를 공유하므로 스레드간 데이터를 주고받는게 간단함
    • 시스템콜이 줄어들어 자원을 효율적으로 관리할 수 있음
  • 시스템 처리량 증가(처리 비용 감소)
    • 스레드 사이의 작업량이 작아 Context Switching이 빠름

단점

  • 구현 및 테스트, 디버깅이 어려움
  • 자원을 공유하는 문제가 발생함(동기화 문제)
  • 하나의 스레드에 문제가 발생하면 전체 프로세스가 영향을 받음

스레드의 Context Switching vs 프로세스의 Context Switching

  • 스레드 Switching은 동일한 프로세스내 한 스레드에서 다른 스레드로 Context Switching)
  • 프로세스의 Switching은 프로세스간 Switching
  • 스레드의 Switching의 경우 가상 메모리 공간이 동일하게 남는 반면에 프로세스의 Switching의 경우 그렇지 않음

요약



References

@JuHyun419 JuHyun419 added the CS Computer-Science label Aug 3, 2021
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
CS Computer-Science
Projects
None yet
Development

No branches or pull requests

1 participant