본문 바로가기

임베디드 리눅스

네트워크 프로그래밍-멀티 프로세스, 멀티 쓰레드, 멀티 플렉싱

728x90
반응형

안녕하세요. WH 입니다. 네트워크 관련 글들을 누군가가 봐주시더라구요.

감사함에 또한 글을 이렇게 쓰고 있습니다.

 

언제가 될지는 모르겠지만, 많은 글들이 쓰여지고

이 글들이 누군가에게 계속 도움이 되길 바랍니다

 

멀티 플렉싱에대해 먼저 쓰다가 생각이 바뀌어 다시 작성 중입니다.

멀티 프로세스, 멀티 쓰레드, 멀티 플렉싱이 무엇인줄 아는 게 좋을 것 같아서요;

간단한 글이지만 시작하겠습니다.

왜 필요할까?

왜 필요할까에 대한 대답이 먼저 일 것 같아요. 쉽게 생각해 보겠습니다. 지금까지 다룬 것은, 서버와 클라이언트가 있을 때 둘이 통신하면 서버도 닫히는 형태였죠. 즉 서버를 열면 요청을 하나 처리하면 끝이났단 말이에요. 그런데 실제 서버는 어떻죠? 다수의 클라이언트들이 요청하고 서버는 그 요청을 들어주죠. 그럼 여기서 궁금증이 생깁니다. 서버 하나로, 다수의 클라이언트의 요청을 처리하는 방식에는 무엇이 있을까 하는 것이죠.

 

멀티 프로세스

  사진이 매우 많은 것을 설명해주지만, 간단하게 설명하고 넘어가겠습니다. 클라이언트 하나의 요청이 들어오면 바로 프로세스 자체를 늘려주는 겁니다. 그런데 이런 방식은 굉장히 비효율적인데요. 왜냐하면 프로세스 자체가 하나의 프로그램 단위로 굉장히 크기 때문이죠. 어떻게 구현했는지는 저번 글에서 보여드렸죠? 그러니까 저번에 보여드린 것은 공부를 위한 코드지, 사용할 수 없는 코드다 라는 점을 알려드리고 싶었습니다. 여튼 그럼 프로세스가 프로그램 단위로 크면 해결 방법에는 무엇이 있죠? 바로 task 부분에서 클라이언트와 통신을 하면 되겠죠. 그니까 쉽게 부분만 복사해서 사용하자 이런 느낌이란 말이죠? 그게 바로 멀티 쓰레드 입니다.

멀티 쓰레드

  쓰레드는 task라도 불리며 메모리 전체를 복사하는 프로세스와는 다르게, 스택만 복사합니다. 그리고 메모리 영역중 힙, 코드, 데이터 영역은 공유를 한답니다. 쓰레드와 프로세스가 같은 것이라고 생각하시는 분들이 계신데, 쓰레드는 프로세스보다 작은 단위이고, 프로세스 안에서 논리적으로 동작하는 하나의 작업 단위랍니다. 여튼 스택만 복사하고 나머지 부분은 공유하기 때문에 서로 간의 통신을 할 때 전역 변수나 힙 메모리 역역을 사용한답니다. 특히 전역 변수를 사용하게 되면, 데이터의 일관성 때문에 mutex를 활용하여 동기화를 해줍니다. 이런 쓰레드에 통신 시 클라이언트의 요청을 처리하도록 일처리를 맡기는 것이 멀티 쓰레드입니다. 개념 자체는 쉽죠?? 그런데 Context switching이란게 있습니다. 이게 뭐냐면, 현재 진행하고 있는 Task의 상태를 저장하고 다음 진행할 Task의 상태 값을 읽어 적용하는 과정을 말하는 데요. Task가 끝날 때 마다, 읽고 써야 하기 때문에 성능 저하가 발생하게 되죠. 그럼 프로세스는요? 프로세스 방식 역시 context switching으로 인한 성능저하가 심합니다. 더 심하겠죠. 읽고 쓰는 게 문제라면, 읽고 쓰지 않으면 되잖아요? 그래서 나온게 멀티 플렉싱입니다.

멀티 플렉싱

서버에 접속한 각 클라이언트 별로 read() 쓰레드를 할당한다고 가정해 봅시다. 그럼 데이터가 오지 않으면 계속 블로킹 상태가 되겠죠? 쓰레드 생성은 스텍을 복사함으로 자원 역시 많이 드네요. 우리, 시그널  핸들링에 대해서 배웠었죠?
그 때는 좀비 프로세스가 발생한다면 그 함수를 호출해줘 이런식으로 배웠었단 말이죠? 이번에는 운영 체제 한테 이런 부탁을 하는 거에요. 

 

서버 : 운영체제야, 내가 일하고 있을거고 read() 호출되면 어떻게 하는지까지 정의해놓을게. read() 요청오면 알려주셈

운영체제 : ㅇㅇ

 

와 말은 쉬워요. 근데 이걸 구현하는 게 쉽지가 않단 말이에요. 왜냐면 할 게 너무 많아요. 우선 블로킹 해줄 핸들러를 만들어야하고, 요청이 들어올 때 처리해주는 콜백도 알아야하고, task도 분산처리해야하고... 뭐 하게 끝이 없어요. 그래도 우리는 구현해 보기로 했으니까.. 천천히 구현해 보도록 하자구요. 우선 개념은 여기까지구요.

반응형

다음 편에는 멀티 플렉싱과 관련된 이론을 다뤄보겠습니다. 이상 WH 였습니다.

 

 

 

728x90
반응형