[원] 몇 가지 서버 사이드 모델 - 다중 프로세스 병발식
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 시스템 호출에 막히지 않고 연결 요청을 처리하는 데 전념하는 것이다.그러나 프로세스 자체의 비용은 매우 크다. 빈번한 프로세스 창설은 많은 사무기기의 자원을 소모할 수 있다.그래서 또 다른 처리 방식이 있는데 그것이 바로 라인 모델이다.다중 프로세스를 만들어 시스템 자원을 소모하는 이상 우리는 라인을 채택하여 목적을 달성할 수 있다.이것이 바로 다음 글에서 이야기할 것이다. 다중 스레드 방식 (스레드 탱크의 실례가 있을 것이다)
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
집 서버 설계 (하드웨어 편)자신의 Redmine이나 ownCloud를 운용하기 위해 사쿠라 VPS, DigitalOcean, OpenShift 등을 놀랐습니다만, 침착 해 왔으므로 현상을 정리하고 싶습니다. 먼저 하드웨어 구성을 정리합니다. ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.