728x90
- Chapter 10 멀티프로세스 기반의 서버구현
- 10-1 프로세스의 이해와 활용
- 두가지 유형의 서버
- 첫번째 연결요청자 접속대기시간은 0초 50번째 연결요청자의 접속대기시간은 50초 100번째 연결요청자의 접속대기시간은 100초 그러나 연결만되면 1초안에 서비스를 완료해주는 서버
- 모든 연결요청자의 접속대기시간은 1초를 넘기지 않습니다. 그러나 서비스를 제공받는데 걸리는 시간은 평균적으로 2~3초인 서버
- 어떠한 서버가 좋을지 고민할 필요가 없다 만약 당신이 100번째 연결요청자라면 100초를 기다리는것보다 1초를 기다려서 2~3초에 서비스를 제공받는게 훨씬 좋은게 당연하다 .
- 다중접속 서버의 구현 방법들
- 전체적인 서비스 제공시간이 조금 늦어지더라도 연결요청을 해오는 모든 클라이언트에게 동시에 서비스를 제공해 평균적인 만족도를 높일 필요가 있다. 그리고 네트워크 프로그램은 CPU의 연산을 필요치 않는 데이터의 송수신 시간이 큰 비중을 차지하므로 둘 이상의 클라이언트에게 동시에 서비스를 제공하는 것이 CPU를 보다 효율적으로 사용하는 방법이다./
- 대표적인 다중접속 서버는 아래와 같다.
- 멀티 프로세스 기반 서버 : 다수의 프로세스를 생성하는 방식으로 서비스 제공
- 멀티 플렉싱 기반 서버 : 입출력 대상을 묶어서 관리하는 방식으로 서비스 제공
- 멀티 쓰레딩 기반 서버: 클라이언트의 수만큼 쓰레드를 생성하는 방식으로 서비스제공
- 위 세가지 중에서 이번 챕터에서는 "멀티프로세스 기반의 서버"에대해 설명한다.
- 프로세스(Process)의 이해
- 프로세스: 메모리 공간을 차지한 상태에서 실행중인 프로그램
- 예시 1 : 인터넷에서 벽돌깨기 게임을 다운받아서 하드디스크에 저장해 놓았다면 벽돌깨기는 프로세스가아닌 프로그램이다. 왜냐하면 실행중인 상태가 아니기때문이다. 만약 게임을 실행한다면 프로그램은 메인메모리라는 곳으로 이동해서 실행을 위한 준비를 마치게 되는데 바로 이 시점부터 프로세스라 부를 수 있다. 만약 벽돌깨기 프로그램을 둘이상 동시에 실행하면 실행하는 수만큼 프로세스가 생성된다. 실행되는 수만큼 메모리 공간을 차지하기 떄문이다.
- 예시2 : 문서편집프로그램과 mp3플레이어, 메신저 이렇게 총 세개의 프로그램을 동시에 실행한다면 프로세스를 동시에 세개 생성하는 것이다.
- 하나의 프로그램이 실행되는 과정에서 여러개의 프로세스가 생성되기도 한다. 지금부터 우리가 구현할 멀티 프로세스 기반의 서버가 대표적인 예이다.
- cpu 코어수와 프로세스 수
- 두 개의 연산장치가 존재하는 CPU를 가리켜 듀얼(Dual)코어 CPU라 하고 네개의 연산장치가 존재하는 CPU를 가리켜 쿼드(Quad)코어 CPU라 한다. 이렇듯 CPU에는 실제 연산장치에 해당하는 코어가 둘 이상 존재할 수 있으며 코어의 수만큼 프로세스는 동시 실행이 가능하다 반면 코어의 수를 넘어서는 개수의 프로세스가 생성되면 프로세스 별로 코어에 할당되는 시간이 나뉘게 된다. 그러나 CPU가 고속으로 프로세스를 실행하기 때문에 우리는 모든 프로세스가 동시에 실행되는 것처럼 느끼게 된다. 물론 코어의 수가 많을 수록 그 느낌은 더할 것이다.
- 프로세스ID
- 프로세스ID : 모든 프로세스는 생성되는형태에 상관없이 운영체제로부터 ID를 부여 받는다. 그리고 이를 가리켜 " 프로세스 ID"라하는데 이는 2이상의 정수형태를띤다. 참고로 숫자 1은 운영체제가 시작되자마자 실행되는 프로세스에 할당되기 때문에 2이상부터 할당된다.
- ps 명령어 : ps 명령어를 통해서 실행중인 프로세스를 간단히 확인할 수 있다. 특히 PID(Process ID)도 함께 보이고 있음에 주목하자 ps 명령어에 옵션 a와 u를 지정해서 모든 프로세스에 대한 다양한 정보를 확인할 수 있게 하였다.
- ps au 라고 콘솔창에 치면된다.
728x90
'책 > 윤성우 TCPIP' 카테고리의 다른 글
10-03 : 시그널 핸들링 (2) (0) | 2020.12.19 |
---|---|
10-01 프로세스의 이해와 활용 (4) ~ 10-03 : 시그널 핸들링 (1) (0) | 2020.12.18 |
09-2 : SO_REUSEADDR (3) (0) | 2020.12.14 |
09-2 : SO_REUSEADDR (2) (0) | 2020.12.13 |
09-2 : SO_REUSEADDR (0) | 2020.12.12 |