ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 프로세스 / 스레드란?
    OS 2020. 10. 21. 21:30
    반응형

    자바 교육을 들을 때, 스레드를 배웠는데 당시에는 아무것도 모르는 상태로 들었던 거라

    "스레드가 뭐지..? 프로세스는 또 뭐야.." 라는 생각과 함께 의미없이 코드만 따라 쳤었다.

    조금 많이 늦은거 같지만 지금에서야 면접 대비 겸 프로세스와 스레드를 정리해본다.

     

     


     

    프로그램

     

    프로그램은 사용자가 원하는 일을 처리할 수 있도록 프로그래밍 언어를 사용하여 올바른 수행절차를 표현해 놓은 명령어들의 집합입니다.

     

     

     

    프로세스

     

    그렇다면 프로세스는 무엇일까요?

    프로세스는 운영체제(OS)가 메모리 등의 필요한 자원을 할당해준 실행 중인 프로그램입니다. 프로그램을 실행하면 운영체제로 부터 실행에 필요한 자원을 할당받아 프로세스가 되는 것입니다.

     

     

    출처 : https://gmlwjd9405.github.io/2018/09/14/process-vs-thread.html

     

    프로세스는 각각 Code, Data, Stack, Heap과 같은 독립된 메모리 영역을 할당 받습니다.

    그렇기에 서로 메모리 공간을 공유하지 못하고 다른 프로세스의 변수나 자료구조에 접근을 할 수 없습니다.

    접근을 하려면 프로세스 간의 통신(IPC, InterProcess Communication)과 같은 방식을 사용해야 합니다.

    또한 기본적으로 프로세스당 최소 1개의 스레드를 가지고 있습니다.

     

    • 멀티 프로세스 : 하나의 응용 프로그램을 여러 개의 프로세스를 구성하여 각 프로세스가 하나의 작업을 처리하도록 하는 것입니다.

     

     

    스레드

     

    위에서 하나의 프로세스에는 최소 1개의 스레드를 가지고 있다고 했죠?

    스레드는 프로세스 내에서 실행되는 각각의 일, 즉 여러 흐름의 단위라고 할 수 있습니다.

     

    출처 : https://gmlwjd9405.github.io/2018/09/14/process-vs-thread.html

     

    스레드는 프로세스 내에서 각각 Stack만 할당받고 Code, Data, Heap 영역은 공유합니다.

    이렇게 같은 프로세스 내에서 스레드끼리 자원을 공유하기 때문에 동기화, 데드락 등의 문제가 발생할 수 있습니다.

     

    동기화와 데드락에 대해 간단하게 설명해드리자면

    프로세스 내 동시에 여러 스레드가 실행될 때 공유하는 자원이 한정적이기에 서로 간의 작업에 영향을 주게 됩니다. 이를 해결하기 위해 작업들 사이의 수행 시기를 맞추는 것을 동기화라고 할 수 있습니다.

     

    데드락은 교착상태라고 부르며 두 개 이상의 작업이 하나씩 자원을 소지(hold)하고 있으면서 상대방이 가진 자원을 서로 원하고(need) 있는 상태로 어떤 작업도 실행되지 못하고 상대방의 작업이 끝나기 만을 기다리는 무한정 대기상태라고 할 수 있습니다.

     

    • 멀티 스레드 : 하나의 응용프로그램을 여러 개의 스레드로 구성하여 각 스레드로 하여금 하나의 작업을 처리하도록 하는 것입니다.

     

     

     

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

     

    멀티 프로세스를 이용해서 작업들을 처리하면 되지 왜 굳이 프로세스에서 스레드를 나눠 멀티 스레드로 사용을 할까요?

    그 이유는 운영체제가 시스템 자원을 효율적으로 관리하기 위해서 입니다. 

    멀티 프로세스로 실행되는 작업을 멀티 스레드로 실행할 경우, 프로세스를 생성하여 자원을 할당하는 시스템 콜이 줄어들어 자원을 효율적으로 관리할 수 있습니다. 뿐만 아니라 프로세스 간의 통신보다 스레드 간의 통신의 비용이 적으므로 작업들 간의 통신의 부담이 줄어들게 됩니다.

    하지만 위에서 설명했던 것처럼 스레드를 사용할 때 생기는 문제들을 생각하면서 프로그래밍을 해야합니다.

     

     

     

     

    References

     

    - https://gbsb.tistory.com/312

    - https://gmlwjd9405.github.io/2018/09/14/process-vs-thread.html

    - https://mingmi-programming.tistory.com/79

    728x90

    'OS' 카테고리의 다른 글

    교착상태(Deadlock) 란?  (0) 2020.10.29
    프로세스의 상태  (0) 2020.10.26

    댓글

Designed by Tistory.