[원] 몇 가지 서버 사이드 모델 - 다중 프로세스 병발식

1816 단어 서버
인용: 이전 글은 동기화 차단 교체식 프로세스 방식을 설명했는데, 이 글은 단일 프로세스가 시스템 호출에 막히는 상황을 처리합니다.사용 방식은 다중 프로세스의 방식으로 프로세스가 막혀서 발생하는 서버가 문제에 응답하지 못하기 때문에 큰 부분을 줄일 수 있다.
 
기본적인 사상은 다음과 같다. 앞에서 말한 바와 같이 단일 프로세스가read () 시스템에서 호출될 때 서버가 다른 연결 요청에 응답하지 못하게 할 수 있다. 그러면 우리는 서버 fork ()에서 많은 하위 프로세스를 내서 업무를 처리할 수 있고 메인 프로세스는accept () 다른 고객 연결을 책임진다.
바디 프레임은 다음과 같습니다.
for(;;){

 fd = accept(...);
 ret = fork() ;
 switch( ret )
 {
 	  case -1 :
 	  	do_err_handler();
 	  	break;
 	  case 0  :   //  
 	  	do_handler_fd( fd );
 	  	break ;
 	  default :   //  
 	  	continue ; 
 }
} 

전체적으로 말하자면 상술한 바와 같이 메인 프로세스는 accept () 연결을 책임지고 하위 프로세스는 연결을 처리한다.
물론,do_handler_fd(fd)에서는 감청 플러그 인터페이스를 닫는 등 플러그 인터페이스만 처리할 수 있다.처리 과정도 지난 장에서 말한 것과 같다.
read(fd,buf,n);

dosomething(buf);

write(fd,buf,n);

  
상위 프로세스에서 하위 프로세스가 종료될 때 발생하는 SIG_를 처리하기 위해 신호 처리 함수를 설정해야 합니다.CHLD 모델, 신호 처리 함수에서 wait()를 호출합니다.좀비의 진행을 피하고,
이 모델과 이전 동기식 차단 교체식을 비교해 봅시다.
(1) 병발량: 이 서버의 메인 프로세스는read나 write () 시스템 호출에 막히지 않고 하위 프로세스를 통해 업무 처리를 합니다.막힌 것도 하위 프로세스에 막힌 것일 뿐이다.그러면 서버 메인 프로세스의 상응하는 시간 요구를 줄일 수 있다.병발량이 크게 강화되었지만 운영체제의 제한을 받을 수 있다.
(2) 코드 복잡도: 뒤에 오는 코드의 복잡도가 높을수록 개발의 난이도도 점점 강화될 것이다.
(3) 안정성: 서버의 안정성은 현재 두 버전이 아직 나타나지 않았다.그러나 프로세스 간의 협업과 병발 제어 등 두 번째 버전을 잘 처리하지 못하면 첫 번째 버전보다 약간 불안정해진다.
다중 프로세스는 또 다른 방식인 Pre-fork 방식, 즉 프로세스 탱크 방식도 있다. 여기는 소개를 많이 하지 않았고 나중에 이 부분을 추가할 것이다. 
요약: 다중 프로세스와 발신식 서버 사이드 모델의 장점은 메인 프로세스가 IO 시스템 호출에 막히지 않고 연결 요청을 처리하는 데 전념하는 것이다.그러나 프로세스 자체의 비용은 매우 크다. 빈번한 프로세스 창설은 많은 사무기기의 자원을 소모할 수 있다.그래서 또 다른 처리 방식이 있는데 그것이 바로 라인 모델이다.다중 프로세스를 만들어 시스템 자원을 소모하는 이상 우리는 라인을 채택하여 목적을 달성할 수 있다.이것이 바로 다음 글에서 이야기할 것이다. 다중 스레드 방식 (스레드 탱크의 실례가 있을 것이다)

좋은 웹페이지 즐겨찾기