• 카테고리

    질문 & 답변
  • 세부 분야

    프로그래밍 언어

  • 해결 여부

    해결됨

멀티 쓰레딩이란?

24.03.21 12:52 작성 조회수 72

2

안녕하세요, 멀티 쓰레딩 강의를 보고 궁금점이 생겨 질문드립니다. 물론 여기서 완벽히 이해하고 갈 예정은 아닙니다. 추후 cpp강의까지 연계하여 공부할 것이기 때문에 제가 이해한 개념이 맞는지 궁금하여 질문 드립니다.

  1. 멀티 쓰레딩이란?


    프로그램에서 원래 한가지 일 밖에 못하는데 멀티 쓰레딩 이라는 개념으로 여러가지 일을 동시에 해주는 것이 맞을까요?
    예를 들어서 계산기가 있고 계산기를 사용하여 답을 얻고자 하는 사람이 3명일 때 쓰레드가 하나 일 경우에는 한 사람씩 순서대로 계산기 사용해야 하지만 쓰레드가 3개일 경우엔 각 사람마다 각자의 계산기를 통해 동시에 계산할 수 있는 그런 느낌이려나요?


    더 나아가서 실시간 서버와 통신하는 게임 같은 경우에도 많은 유저가 서버에게 요청하는데 쓰레드가 하나일 경우엔 이걸 하나씩 처리하지만, 멀티 쓰레딩을 사용하면 여러 개 처리하는 느낌일까요?

  2. 메인 쓰레드와 쓰레드 생성


    강의에서 쓰레드라는 개념으로 보여주신 그림입니다. 위 그림을 통해 이해했던 개념이 프로그램에는 메인 쓰레드가 있고 메인 쓰레드가 처리해야 할 일이 많을 경우 자신을 복제하여 분신을 만들고(쓰레드 생성) 분신(쓰레드)에게 일을 할당하여 일을 시키고 프로그램이 끝나기 전 메인 쓰레드는 자신의 분신(쓰레드)과 다시 합체한다음 프로그램이 종료되는 느낌일까요? 이 과정에서 아직 분신(쓰레드)가 할당한 일을 하고 있다면 기달렸다가, 합체하고 종료되는 건가요?

  3. 멀티 쓰레딩의 큰 개념은 결국 하나?
    강의 중 c언어 표준에는 멀티 쓰레딩이라는게 없어서 운영체제에서 제공하는 api을 통해서 멀티 쓰레딩을 할 수 있다고 하셨는데요, 그러시면서 윈도우에서 멀티 쓰레딩을 사용하는 방법과 gcc컴파일러에서 멀티 쓰레딩 사용하는 방법에 대해서 보여주셨는데
    윈도우에서는 windows.h헤더파일과 쓰레드에 사용되는 전용 함수를 사용하셨고
    gcc컴파일러에선 pthread.h헤더파일과 쓰레드에 사용되는 전용 함수를 사용하셔서 구현을 해주셨는데요


    운영체제 api마다 c언어에서 멀티 쓰레드의 대한 제공하는 헤더파일과 함수, 문법과 표현법이 모두 달라서 이번 예제에서 조차 윈도우와 gcc컴파일러에서 작성한 방법이 달랐지만 결국 큰 틀은 쓰레드를 생성하고 쓰레드에게 할 일을 배정하고 프로그램이 끝나기 전 쓰레드들을 다시 하나로 합치는 이 과정은 어느 환경이든 다 똑같은 개념일까요?

  4. 여담으로 멀티 쓰레딩과 표준에 대하여
    C언어 표준에는 멀티 쓰레딩이 없다고 하셔서 각 운영체제마다 다른 기술을 사용해서 구현해야 하는데 CPP언어 표준에는 멀티 쓰레딩이 있나요??

     


    항상 친절한 답변 남겨주셔서 감사합니다.

답변 1

답변을 작성해보세요.

2

Soobak님의 프로필

Soobak

2024.03.21

안녕하세요, 질문&답변 도우미 Soobak 입니다.

 

네, 질문을 통해 말씀해주신 내용 전반에서 멀티 스레딩의 개념에 대해서 적절히 잘 이해하고 있으십니다.

조금 더 이해를 도와드려보면,
멀티 스레딩은 하나의 프로그램이나 프로세스가 여러 가지 작업을 '동시에' 수행할 수 있도록 해주는 기술입니다.
각 스레드는 별도의 '실행 흐름' 을 가지며, 이를 통해 '병렬 처리' 가 가능해지고 효율성을 증가 시킬 수 있습니다.
계산기에 비유하여 예를 들어주신 것처럼, 여러 사용자가 동시에 각기 다른 계산을 수행하는 것과 비슷하네요.

 

보통 프로그램이 시작하면 '메인 스레드' 가 생성되고, 이 메인 스레드가 다른 '작업 스레드' 들을 생성할 수 있습니다. 각 스레드는 주어진 작업을 독립적으로 수행한 후 스스로 종료될 수도 있고, 메인 스레드와 합쳐질 수도 있습니다. 다만, 프로그램이 종료될 때는 모든 스레드의 작업이 완료되고 종료되어야 합니다.

 

또한, 이해하신 내용 처럼, 멀티 스레딩의 기본 개념은 환경에 관계없이 동일합니다.
즉, '스레드를 할당한 다음, 작업이 완료되면 스레드가 종료되는 과정' 은 모든 시스템에서 유사합니다.
하지만, 세부적인 구현, 사용하는 헤더 파일, 함수, 문법 등은 운영 체제와 컴파일러에 따라 다를 수 있습니다.

질문주신 C++ 에서의 멀티 스레딩에 대한 내용에 답변을 드리면, C++ 은 C++11 표준부터 <thread> 라이브러리를 통해 표준화된 멀티 스레딩을 지원하게 되었습니다. 이를 통해 플랫폼에 독립적으로 멀티 스레딩을 사용할 수 있습니다.