주된 이유는 Nginx가 최신 epoll(Linux 2.6 커널) 및 kqueue(freebsd) 네트워크 I/O 모델을 사용하기 때문입니다.
epoll은 다중화 IO(I/O 다중화) 방법이지만 Linux2.6 이상의 커널에서만 사용됩니다. 이 문제에 대해 논의하기 전에 먼저 다중화 IO가 필요한 이유를 설명하겠습니다. 인생의 예를 들어요.
당신이 대학에 다니고 있고 친구가 방문할 때까지 기다려야 한다고 가정해 보겠습니다. 이 친구는 당신이 A동에 있다는 것만 알고 구체적으로 어디에 사는지는 모르기 때문에 약속을 잡습니다. 좋아, A동 문에서 만나자.
이 문제를 해결하기 위해 차단 IO 모델을 사용한다면, 이 시간 동안 A동 문에서 친구들이 도착할 때까지 기다리기만 하면 된다. 다른 일은 할 수 없습니다. 이 방법의 효율성이 낮다는 것을 아는 것은 어렵지 않습니다.
이제 시대가 바뀌었고 다중화 IO 모델이 이 문제를 해결하는 데 사용되기 시작했습니다. 건물 관리인 이모를 찾기 위해 A동으로 가는 방법을 알려드립니다. 여기 건물 관리인 이모가 다중 IO 역할을 합니다.
Select 모델과 epoll 모델의 차이점을 자세히 설명하세요.
Select 버전 이모가 합니다. 예를 들어 동급생 A 당신의 친구가 여기 있습니다. 선택 버전의 이모는 바보입니다. 그녀는 동급생 A가 누구인지 확인하기 위해 친구들을 방으로 데려갑니다. 코드에서 이모의 선택 버전은 다음을 수행합니다.
초기의 차단 IO 처리 모델을 비교해 보면 다중화 IO를 사용한 후 프로그램이 자유롭게 자체 처리를 수행할 수 있음을 알 수 있습니다. IO 작업 이외의 작업에 대해서는 다중화 IO만 수행됩니다. IO 상태가 변경되면 이를 알려주고, IO 상태가 변경될 때까지 차단하고 기다릴 필요 없이 해당 작업을 수행합니다.
위 분석에서도 알 수 있듯이 실제로 select보다 epoll의 개선이 더 크다는 것을 알 수 있습니다. 시간과 공간을 교환한다는 아이디어의 구체적인 적용.
더 많은 Nginx 관련 기술 기사를 보려면
Nginx Tutorial 칼럼을 방문하여 알아보세요!
위 내용은 nginx가 왜 그렇게 빠른가요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!