[용어 정리] 프로세스(Process), 쓰레드(Thread)란?

[용어 정리] 프로세스(Process), 쓰레드(Thread)란?


쓰레드를 알기전에 프로세스를 먼저 알아보자

프로세스

  • 우리가 OS에서 작업을 할 때는 워드창, 웹브라우져, 음악플레이어정도는 동시에 켜둔 상태에서 작업을 진행하고 있다.
  • 동시에 이러한 작업이 이루어질 수 있는 것은 CPU가 시간을 분할하여 CPU를 사용할 수 있는 제어권을 각각의 프로그램에게 한번씩 나누어주고 있기 때문이다.
  • 이 하나의 작업 즉, 운영체제에서 실행중인 하나의 프로그램을 프로세스라고 한다.
  • 작업이 여러개 이루어진다는 것은 프로세스가 여러개 동시에 작동하고 있다는 의미
  • 멀티프로세스 : 두개 이상의 프로세스가 실행되는 것



쓰레드

  • 각 쓰레드별로 자신만의 스택과 레지스터를 가짐
  • 기본적으로 하나의 프로세스가 생성되면 하나의 쓰레드가 같이 생성되는데 이를 메인 쓰레드라고 부름.
    • 쓰레드를 추가로 생성하지 않는 한 모든 프로그램 코드는 메인 스레드에서 실행
  • 프로세스 내에서 실행되는 세부 작업의 단위, 즉 프로세스의 실행 단위
  • 여러개의 쓰레드가 모여 하나의 프로세스를 구성
  • 쓰레드는 프로세스의 메모리, 자원등을 공유
    • 커널의 도움없이 상호간의 통신 가능
  • 스택을 쓰레드마다 독립적으로 할당하는 이유
    • 스택 메모리 공간이 독립적 -> 독립적인 함수 호출 가능 -> 독립적인 실행 흐름
  • PC Registers를 쓰레드마다 독립적으로 할당하는 이유
    • PC Register : CPU가 요청한 데이터를 일시적으로 저정하는 다목적 공간
    • PC Register값은 쓰레드가 명령어의 어디까지 수행하였는지 나타냄
    • 쓰레드는 CPU를 할당받았다가 스케줄러에 의해 다시 선점당함
      • 즉, 명령어가 연속적실행되지 못함 -> 어느 부분까지 수행했는지 기억 필요
  • 운영체제에서 프로그램을 실행하게 되면 하나의 프로세스가 동작하게 되며 이 프로세스는 자신을 구성하고 있는 쓰레드를 하나씩 CPU에게 아주 빠르게 실행하도록 한다.
  • 멀티 쓰레드 : 하나의 프로세스를 구성하는 여러개의 쓰레드




밑의 두 그림은 파이썬에서의 멀티 프로세싱과 멀티 쓰레딩
즉, 파이썬에서 멀티 쓰레딩이 비 효율적인 이유

  • 그럼 파이썬은 병렬작업이 불가능?
    • 하나의 interpreter를 쓰는게 아니라 여러 프로세서를 구동시키면 됨
    • 이 경우는 파이썬에서 관리하는게 아니라 OS에서 관리
      • OS에서 적절하게 프로세스를 코어별로 할당을 하게 됨
      • 전체적으로 속도가 향상

GIL(Global Interpreter Lock)

  • 여러개의 쓰레드가 있을때 쓰레드간의 동기화를 위해 사용되는 기술
  • GIL은 전역에 lock을 두고 이 lock을 점유해야만 코드를 실행할 수 있도록 제한
    • 즉, 동시에 하나 이상의 쓰레드가 실행되지 않는다.




참고
  • https://goodgid.github.io/What-is-Thread/
  • http://qkqhxla1.tistory.com/270
  • https://blog.seulgi.kim/2015/01/global-interpreter-lock.html



댓글

이 블로그의 인기 게시물

[소프트웨어공학] NS(Nassi-Schneiderman) 차트

[컴퓨터네트워크] Telnet이란?

[Python] # -*- coding: utf-8 -*-를 쓰는 이유