ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 멀티프로세스 VS 멀티스레드
    CS(ComputerScience) 2021. 4. 30. 15:47

    안녕하세요. 그린입니다🟢
    이번 포스팅에서는 멀티프로세스와 멀티스레드에 대해 비교해보겠습니다🧑🏻‍💻

     

    프로그래밍을 하다보면 멀티프로세스와 멀티스레드에 대해 어느것이 더 효율적인 성능을 낼 수 있는지 고민하게됩니다.

    우선 비교를 하려면 프로세스가 무엇인지 스레드가 무엇인지부터 알아보도록 하겠습니다🎉

     

    프로그램

     - 작업을 실행할 수 있는 코드 파일

     

    프로세스

     - 프로그램을 실행시키는 인스턴스

     - 각 독립된 메모리 영역 (코드 / 데이터 / 스택 / 힙)을 가짐

     - 최소 1개의 스레드를 보유

     - 프로세스끼리는 접근이 불가 (IPC, 프로세스 간 통신 기법을 통해 접근이 가능. e.g. 소켓)

     

    스레드

     - 프로세스 내에서 실행되는 하나의 흐름 단위

     - 한 프로세스 내에 둘 이상의 스레드가 동시에 실행되는것이 멀티스레드 방식

     - 프로세스의 메모리를 여러 스레드가 공유할 수 있음

     - 프로세스로부터 스택 영역을 각 스레드는 할당 받고 힙과 데이터 영역을 스레드끼리 공유함

     - 다른 프로세스 메모리에는 접근 불가

     

    스레드 종류

     - 스레드를 지원하는 주체에 따라 2가지로 나눔

      1) 사용자 레벨 스레드

      2) 커널 레벨 스레드

     

    프로세스 / 스레드 문맥 교환

     - Context-Switch라고도 표시하며 현재의 프로세스/스레드 상태를 레지스터에 저장하고 다른 프로세스/스레드를 CPU에 올리는 일련의 과정

     

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

     - 멀티프로세스는 OS 안에서 여러 프로세스로 업무를 처리

     - 멀티스레드는 하나의 프로세스 내 여러 스레드로 여러 작업을 처리

     

    승자는 멀티스레드

     - 메모리 영역을 공유함으로 메모리가 절약되고 속도가 빠름

     

    멀티스레드의 문제점

     - 메모리 영역을 공유하기에 다른 값을 가져올 수 있어 동기화 문제가 발생함으로 이에 대해 동기화 처리를 해줘야함

     - 동기화 처리를 하기위해 과도한 Lock의 사용으로 병목현상이 발생할 수 있음

     

     

    [느낀점]

    멀티프로세스와 멀티스레드의 차이를 이해하였다. 멀티스레드로 코드를 구현하는게 만만치 않다고 생각한다 다만..
    멀티스레드로 코드를 구현하고 해당 스레드들 마다 순서를 지정해주고 하는 과정이 생각보다 힘들것 같다. 역시 장점이 있으면 단점이 있는것 같다! 그렇지만 프로세스를 늘리는것은 현저한 시스템 성능 저하를 줌으로 결국 개발자는 이 멀티스레드를 잘 구현하는것이 살아남는길이라고 생각이 든다. 디버깅을 해보면 프로세스보다 스레드를 확인하는게 더 어렵다. 즉 개발과 디버깅 시에는 참 힘들지만 시스템 관점에서는 더 좋은 방식인 멀티스레드.. 어렵더라도 그렇게 구현해보도록 습관을 길러보자🎉

     

    [참고자료]

    https://goodgid.github.io/What-is-Multi-Thread/

    https://kingofbackend.tistory.com/119?fbclid=IwAR3LZY-KEbPyL_IqWy7s1rGGf01Bkd7h2jF5RyQiPJmLH06vF8eaGKidlZg

     

    'CS(ComputerScience)' 카테고리의 다른 글

    스택  (0) 2021.05.18
    우선순위 큐  (2) 2021.05.17
    Cache  (0) 2021.02.04
    HTTP & TCP/IP  (0) 2021.01.18
    OS와 Process  (0) 2021.01.05
Designed by Tistory.