ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [운영체제] 프로세스(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
Designed by Tistory.