[C++]11. 프로세스와 스레드(멀티 프로세싱? 멀티 스레드?)
안녕하세요 고급개발자가 꿈인 코린이 입니다.
오늘은 프로세스와 쓰레드에대해서 다루어 보도록 하겠습니다.
이 내용은 특히 면접볼때 단골 질문으로 초보 개발자 분들께서는 프로세스와 쓰레드의 정확한 차이점을 알기 힘듭니다.
왜냐하면 학교에서 프로젝트하거나 혼자 만들었던 프로그램들은 프로세스간통신(IPC)를 할 필요도 없고
단일 프로세스로만 거의 구현을 하기때문에 정확히 인지하고 있지 않는경우가 많습니다.
즉 여기서 단일 프로세스란 초보개발자 분들께서(저포함) 하나의 프로젝트를 생성해서 가장 기본인 Hellow word를
출력했을때 이것이 바로 하나의 프로세스 입니다. 여기서 하나의 프로세스들은 각 하나의 메인 쓰레드를 갖는데
그이유는 쓰레드가 있어야 프로세스들이 동작을 하기 때문입니다.
그래서 클래스만 작성하고 따로 스레드는 언급안했는데 프로그램이 돌아가네?? 라고 생각이 들때가 있는데
이 실행 자체가 하나의 스레드이기 때문에 프로그램이 실행이 되는 것 입니다.
일단 프로세스의 예로 아래 사진들을 보겠습니다.
위의 이미지처럼 하나의 프로젝트를 만들고 실행을 시켰을때 위와같이 하나의 프로그램이 실행이 되었습니다.
이것이 하나의 프로세스 입니다.
이번에는 위의 이미지처럼 하나의 프로젝트에서 2번 실행을 눌렀습니다. 그렇다면 이것은 2개의 프로세스가 되는
것 입니다.
https://gmlwjd9405.github.io/2018/09/14/process-vs-thread.html
위의 블로그에 아주 잘나와있고 이해하기 쉽게 설명이 되어있어서 공유 하겠습니다.
그렇다면 멀티 프로세스란 무엇일까요??? 여기서 IPC란 무엇일까요??
멀티 프로세스란 하나의 응용 프로그램을 여러개의 프로세스로 나누어서 동작하게 하는 것으로
한가지 예를 들어 설명 드리겠습니다.
도서관 대출 및 반납 프로그램을 예로 드리겠습니다.(실제로 어떻게 구성되어 있을지는 모르기 때문에 예제라고 생각해주세요)
요즘 도서관 대출 및 반납은 컴퓨터 모니터에 반납을 클릭하고 책의 바코드나 자체 인식기를 통해서 반납하거나 대출을
많이 합니다. 그래서 여기서 이 응용프로그램의 구성을 모니터 화면에 보여지는 ui앱(user interface)이 하나있고
실제 대출과 반납을 등록하는 서비스 앱이 하나 있다고 가정하면 이런 구성이 멀티 프로세싱입니다.
하나의 응용프로그램 즉 도서관 대출 반납 프로그램에서 ui앱과 서비스 앱이 나누어져있는 셈이지요
ui앱에서는 현재 사용자가 무엇을 선택했는지를 앱에 알려주어서 현재 바코드로 대고있는것이 반납을 실행할 것인지
아니면 대출을 신청할 것인지 앱에서 정해서 대출이면 대출을 반납이면 반납을 하도록 앱에서 하고 그 결과를 ui앱에
알려주어서 어떻게 진행 되었는지 사용자에게 보여줄수 있는 것입니다.
이러한 구조가 멀티 프로레싱입니다. 그렇다면 IPC란 무엇일까요??
IPC란 프로세스 간의 통신으로 같은 프로젝트의 2개의 프로세스가 있습니다.
왼쪽 프로세스를 A라고하고 오른쪽은 B라고 하겠습니다.
A프로세스에서 1에서 6까지 리스트를 삭제했는데 B는 A프로세스에서 삭제한 내용을 전혀 알수 없습니다.
그렇기 때문에 만약 A프로세스에서 1에서 6까지 지운내용을 B프로세스 에서 알고 싶다면 IPC를 이용해서
A에서 B로 1에서 6까지 지웠다고 알려주어야 합니다. 이것이 IPC입니다.
리눅스에서 IPC하는 내용은 추후에 qt프로그램을 하면서 다루겠습니다.
그렇다면 멀티 스레드는 무엇일까요??
이번에는 유튜브를 예로들겠습니다.
유튜브를 실행시켜서 동영상을 재생시켰습니다. 그런데 동영상을 플레이하는 동시에 댓글들을 아래 위로 스크롤하면서
볼수가있죠??
이처럼 하나의 프로세스에서 하나의 동작을 하고있지만 다른 동작을 동시에 할수있는 것이 멀티 스레드 입니다.
스레드를 3개를 쓴다 그러면 3개의 동작을 동시에 할수 있는 것이죠
스레드의 예제는 아래 동영상을 참고해 주시면 됩니다.
아래 동영상과같이 화살표가 왼쪽으로 돌아가는 것 하나 오른쪽을 돌아가는 것 하나 이렇게 하나의 프로세스에 각자의
쓰레드를 만들어서 각자의 동작을 동시에 실행을 시킬수 있는것이 멀티 스레드 입니다.
이러한 스레드를 사용하는 내용도 추후 c++ 프로그래밍에서 다루어 보도록 하겠습니다.
여기 까지 프로세스와 스레드에대해서 간략한 예로 설명 드렸습니다.
감사합니다.!!
'C++ > C++심화' 카테고리의 다른 글
[C++]13 C++ 문자열 비교 하는 라이브러리 사용하기(strcmp,strncmp) (0) | 2019.11.02 |
---|---|
[C++]12. C++ 소스코드에서 linux 명령어 실행 하는 방법 (0) | 2019.10.20 |
[C++]10. vector 사용하기(구조체 vector중간 원소 삭제하기,특정원소 삭제하기) (0) | 2019.09.04 |
[C++]9. C++ #if #define 사용하기(전처리 지시문 사용하기) (0) | 2019.09.02 |
[C++]8. C++ list사용하기 (0) | 2019.08.24 |