나는 아파치가 사용하는 스레드를 이해한다 : 모든 연결은 스레드를 열고 응답이 보내지면 스레드는 닫히고 다른 스레드의 자원을 해제한다.Nginx는 HTTP 요청을 어떻게 처리합니까?
하지만 Nginx에서 사용하는 이벤트 기반 디자인은 없습니다. 내가 이벤트 구동 디자인에 대한 몇 가지 기본 사항을 읽었지만 ..이 웹 요청을 처리하는 nginx에 의해 사용되는 방법을 이해하지 않습니다.
Nginx가 이벤트 중심 방식으로 연결을 처리하는 방법을 읽고 이해할 수 있으므로 이벤트 기반 디자인을 수락하는 것보다는 스레드 기반 디자인을 사용하는 것이 더 낫습니다.
하지만 한 스레드가 수만 명의 사용자에게 서비스 할 수 있다면 더 많은 서비스를 제공하기 위해 여러 스레드를 사용하지 않는 이유는 무엇입니까? 또는 나는 그것을 잘못 듣고있다. –
원자로는 소켓에서 읽기와 같이 비 threadsafe 연산을 수행해야하기 때문에. 약간 다른 방식으로 작동하는 Proactor 패턴을 사용하면 다중 스레드 (작업자 스레드의 고정 된 풀, 예 : CPU 당 하나의 풀)가 가능합니다. 예를 들어 OS가 버퍼에 읽기 데이터를 배치하는 경우 (비동기 조작). 그러나 프로 액터는 자체 단점이 있습니다. 즉, 버퍼에 더 많은 메모리를 확보해야합니다. 단일 CPU 만 사용하는 경우 Linux에서 속도가 느립니다. – Onestone
"한 스레드가 수만 명의 사용자에게 서비스를 제공 할 수 있다면 왜 여러 스레드를 사용하지 않을까요?"스레드는 비용이 많이 드는 프로세스를 줄이기 위해 고안 한 골칫거리입니다. 비동기 I/O를 수행하는 요점은 단일 프로세스 내에서 많은 클라이언트를 처리하고 창 밖으로 스레딩을 얻을 수 있기 때문입니다. 비동기 I/O 분야에서 스레딩 가격의 가치가있는 성능 향상을 보지 못할 것이라고 확신합니다. – flow