ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 프로세스 vs 쓰레드
    CS 2020. 12. 13. 02:39

    프로그램

    • 어떤 작업을 위해 실행할 수 있는 명령어의 집합
    • 저장 장치에 저장되어있지만 메모리에 올라가지 않은 정적인 상태

    프로세스

    • 운영체제로 부터 자원을 할당 받은 작업의 단위
    • 실행되고 있는 동적인 상태의 프로그램

    특징

    • 각각 독립된 메모리 영역 (Code, Data, Stack, Heap)을 할당 받는다.
    • 프로세스당 최소 1개의 스레드(메인 스레드)를 가지고 있는다.
    • 각 프로세스는 별도의 주소 공간에서 실행되며, 한 프로세스는 다른 프로세스의 자원에 접근할 수 없다.
    • 다른 프로세스의 자원에 접근하고 싶다면 프로세스간의 통신(IPC)를 사용해야 한다.

    스레드

    • 프로세스가 할당받은 자원을 이용하는 실행 흐름의 단위
    • 프로세스의 특정한 수행 경로

    특징

    • 스레드는 프로세스 내에서 stack만 따로 할당 받고 Code, Data, Heap의 영역은 공유한다.
    • 프로세스 내의 주소 공간이나 자원들을 같은 프로세스 내의 스레드 끼리 공유하며 실행된다.
    • 같은 프로세스 내에 있는 여러 스레드는 같은 힙 공간을 공유하지만 다른 프로세스 끼리의 메모리에는 직접 접근할 수 없다.
    • 각각의 스레드는 별도의 레지스터와 스택을 갖고 있지만 힙 메모리는 서로 읽고 쓸 수 있다.
    • 한 스레드가 프로세스의 자원을 변경하면 다른 이웃 스레드에서 즉시 변경 결과를 볼 수 있다.

     

    멀티 프로세스 vs 멀티 스레드

    멀티 프로세스

    하나의 컴퓨터에 여러 CPU를 장착 -> 하나 이상의 프로세스들을 동시에 처리(병렬 처리)

    장점 - 안정성이 높다 (독립된 구조이기 때문이다.)

    단점 - 각각의 메모리 영역을 가지고 있어 작업량이 많을수록 오버헤드 발생, Context Swtiching 으로 인한 성능 저하

     

    멀티스레드

    장점

    • 프로그램의 응답시간이 단축되고 시스템의 처리율이 향상된다.
    • 시스템의 자원 소모량을 감소시킬 수 있다.
    • 프로세스 간 통신 방법에 비해 스레드 간의 통신 방법이 훨씬 간단하다.
    • Context Switching 할 때 공유하고 있는 메모리만큼의 메모리 자원을 아낄 수 있다.
    • 스레드는 프로세스 내의 Stack영역을 제외한 모든 메모리를 공유하기 때문에 통신의 부담이 적어 응답시간이 빠르다.

    단점

    • 여러 개의 스레드 사용 할 경우 미묘한 시간차나 잘못된 변수를 공유함으로써 오류가 발생할 수 있다.
    • 스레드간 통신할 경우 충돌 문제를 방지하기 위해 동기화 문제를 해결해야 한다.
    • 프로그램 디버깅이 어렵다.
    • 단일 프로세스 시스템에서는 효과를 기대하기 어렵다.
    • 메모리 영역의 내용을 공유하기 때문에 한 스레드에서 오류가 발생하면 같은 프로세스 내의 다른 스레드가 모두 종료된다.

    'CS' 카테고리의 다른 글

    해싱(Hashing)?  (0) 2020.12.22
    세마포어? 데드락?  (0) 2020.12.14
    CPU 스케줄링 알고리즘  (0) 2020.12.12
    트랜잭션 격리 수준?  (0) 2020.12.11
    객체지향 프로그래밍 (OOP)  (1) 2020.12.09
Designed by Tistory.