-
[운영체제] 프로세스(Process)와 스레드(Thread) 간단 정리컴퓨터지식/운영체제 2022. 12. 29. 04:09
프로세스(Process)와 스레드(Thread)에 대해 간단 정리해 보도록 하자
1. 스레드 = 경량 프로세스
- 스레드는 하나의 작은 프로세스라고 보면 된다.
- Docker를 경량 컨테이너라고 한다면,
- Process : Thread = Docker : VM 이라고도 개념적으로 볼 수 있다.
2. 스레드는 프로세스 안에 있다
3. 프로세스를 실행하면 일단 하나의 스레드(main 스레드)라고 볼 수 있다
- 거기서 또 다른 스레드를 만들 수 있다.
- 그게 바로 멀티스레드
4. 프로세스는 독립적인 자원을 가지고 있다
- 메모리, 프로세스ID(디스크립터) 등등
- 스레드는 프로세스 자원을 공유한다 → 프로세스 안의 변수들, 스레드의 변수들(메서드 안의 로컬 변수들을 공유 안함)
- 공유로 인해 동시성 문제가 생김(데드락, 라이브락 등)
5. 스레드들은 각각 다른 실행 흐름을 갖는다
- 4개의 스레드를 만들면 4개가 각각 다른 코드 흐름을 가진다
6. 스레드의 상태
- new, runnable, waiting, blocked, terminated
7. 프로세스와 스레드가 왜 필요한가
- 효율: 병렬 실행(멀티코어)
- 하나의 프로그램이 여러가지 작업을 동시에 해야 하는 경우가 대부분임
8. 어디서 쓰나
- 보통 서버들(웹 서버, DB 서버 등): Spring 등에는 스레드 풀을 설정할 수 있다.
- GUI 프로그램들
- 게임
9. 어떻게 쓰나
- 기본적으로 운영체제에서 제공하는 기능
- Java와 같은 VM 언어는 언어에서 제공하기도 → 하지만 결국엔 운영체제
- 꼭 스레드를 직접 사용해야 하는건 아니다. 저수준 동시성 제어는 어려운 문제 → 다른 모델들도 많다 Executor 모델, Actor, Reactive 함수형 방식 등등
- 공유로 인해 발생하는 문제들이 많고, 많은 경우 잘 조절된 락으로 동기화(Syn)하거나 불변성(immutable)문제를 해결(thread safe)
10. 추가
- 컨텍스트 스위치와 오버헤드
- 그럼 프로세스는 뭔가 → 메모리에 로딩된 프로그램
- 파이썬은 GIL 때문에 기본적으로 멀티스레드 제한이 있다고 한다. IO 효율성을 위한 멀티스레드는 의미가 있지만 CPU 중심 작업은 싱글스레드보다 효율이 낮아질 수도 있다고... 그래서 mulitprocessing 등 프로세스를 사용용하는 병렬성을 사용하는 경우도 있다고 한다.
- 비동기(asynchoronous) 프로그래밍 방식은 경국 멀티스레드를 활용하는 경우가 많다.(이벤트 루프 방식을 쓰기도 한다)
- 간단하게만 알아보고 자세한 것들은 추후 다루도록 하겠다.
'컴퓨터지식 > 운영체제' 카테고리의 다른 글
[CRLF] CRLF란 무엇일까? (0) 2023.11.03