Process와 Thread


  • Process와 Thread에 대해서 공부하고 정리한 내용입니다.

Process

  • 프로세스란 운영체제 위에서 독립적으로 실행되고 있는 프로그램을 말한다

  • 예를 들어 음악 재생 프로그램, 사진 편집 프로그램등 이러한 것들이 각각의 프로세스가 된다.

  • 그리고 각각의 프로세스는 독립적으로 메모리 위에서 실행되기 때문에 특정 프로세스에 문제 생기면 그 프로세스만 종료된다.

  • 각각의 프로세스마다 할당된 메모리나 데이터들이 지정되어 있는데 즉, 리소스가 정해져 있다

  • 프로세스는 다음과 같이 구성되어 있다.

    • Code

      • 프로세스 안에는 프로그램을 위해서 작성된 코드가 있다

      • 즉, 프로그램을 실행하기 위한 코드가 들어있다

    • Stack

      • 그리고 그 코드와 프로세스 안에서 함수들이 어떤 순서로 실행되어야 하는지, 이 함수가 끝나면 어느 위치로 다시 돌아가야하는지에 대한 정보를 가지고 있는 스택(Stack)이 있다
    • Heap

      • 힙(Heap)은 우리가 객체를 생성하거나 데이터를 만들 때 데이터들이 저장되는 공간이다
    • Data

      • 힙에서는 동적으로 할당된 변수들이 저장되는 반면에, 데이터(Data)에는 전역 변수나 Static 변수들이 할당된다


Thread

  • 프로세스는 프로그램을 동작하는 최고의 단위이고, 스레드는 프로그램안에서 동시에 여러개가 수행할 수 있는 작은 단위이다.

  • 스레드는 자신들이 수행해야 하는 함수의 호출을 기억해야 하기 때문에, 각 스레드 마다 스택이 할당되어져 있다.

  • 스레드는 한 프로세스 안에서 여러개가 동작할 수 있는데 스레드는 각각 저마다 해야하는 업무를 배정 받는다

  • 하지만 프로세스 안에서 동작하는 스레드는 결국은 한 프로그램 안에서 작동하기 때문에 프로세스에 지정된 Code와 Data, Heap에 공통적으로 접근해서 업데이트가 가능하다

  • 예를 들어, 음악을 들으면서 사진을 편집할 수 있다는 어플리케이션이 있다면, 음악을 재생하는 스레드 하나와 사진을 편집하는 스레드들이 저마다 작업을 수행할 수 있다

  • 즉, 스레드는 동시다발적으로 발생할 수 있기 때문에 프로세스가 조금 더 효율적으로 일을 할 수 있도록 도움을 준다

  • 만약 프로세스가 하나의 일밖에 일밖에 하지 못한다면 음악을 듣는 동안안 사진 편집을 할 수 없지만, 여러 스레드들이 안에 있기 때문에 다양한 일들을 동시에 할 수 있다

  • 스레드에는 어디까지 작업을 수행했고, 그 다음에는 어디로 이동해야 하는지 흐름을 기억할 수 있는 고유의 Stack이 저장되어 있지만 Code나 Data, Heap 같은 공통적인 리소스는 프로세스 안에 있기 때문에 스레드는 이 프로세스에 공통적으로 할당된 리소스에 동시 다발적으로 접속해서 업데이트 하거나 공유하면서 사용한다

  • 멀티스레딩이 어려운 이유는 잘못하면 공통적으로 업데이트해서 순서가 맞지 않거나 하는 문제가 발생할 수 있기 때문이다










© 2020. by dkmqflx

Powered by dkmqflx