[용어 정리] 프로세스(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
댓글
댓글 쓰기