서버 소켓을 만들고 바인딩하고 주소와 포트를 수신하는 프리 포킹 웹 서버를 만들었으며 클라이언트 요청을 제공하는 작업자 역할을하는 지정된 수의 작업자 (하위 프로세스)를 프리 포킹합니다.
모든 작업자는 상위 서버의 소켓 설명자를 상속하고이를 사용하여 클라이언트 요청을 수락합니다. 자식 프로세스는 "병렬"에서 자율 프로세스로 실행되며 서버 소켓 설명자와 함께 accept 함수를 사용합니다. 클라이언트 요청을 수락 할 때 수락 기능에 대해 잠금 및 잠금 해제 메커니즘을 사용해야합니까? 아니면 운영 체제가이를 수행합니까? 여기서 아이디어는 여러 프로세스가 클라이언트 요청을 수락하기 위해 공통 서버 소켓 설명자를 사용한다는 것입니다. 경쟁 조건이나 교착 상태를 피하기 위해 상호 배제 메커니즘으로 이것을 보호해야합니까?
accept 기능에서 I / O nonblocking을 사용한다는 점을 고려하십시오.
다음 코드가 있습니다.
for(;;) {
int client = accept(...);
if (client < 0) continue;
...
}
다음과 같은 것을 사용해야합니까?
for(;;) {
lock();
int client = accept(...);
unlock();
if (client < 0) continue;
...
}
??
아니요. 시스템 호출이므로 원자 적입니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다