>운영 및 유지보수 >엔진스 >nginx가 왜 그렇게 빠른가요?

nginx가 왜 그렇게 빠른가요?

步履不停
步履不停원래의
2019-06-20 17:52:123911검색

nginx가 왜 그렇게 빠른가요?

주된 이유는 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가 누구인지 확인하기 위해 친구들을 방으로 데려갑니다. 코드에서 이모의 선택 버전은 다음을 수행합니다.


Actipro CodeHighlighter(프리웨어)에서 생성된 코드 강조 표시


int
n = select(&readset, NULL,NULL,100);

for
(int i = 0; n > ++i){if (FD_ISSET(fdarray[i],

&
readset) ){do_something( fdarray[i]);--n;} }



아줌마의 epoll 버전은 더 발전된 버전입니다. 그녀는 동급생 A의 정보(예: 방 번호)를 적어둡니다. , 그녀는 동급생 A가 어느 방에 있는지 친구에게 알려주기만 하면 됩니다. 그러나 누군가를 찾기 위해 사람들로 가득 찬 건물을 직접 이끌 필요는 없습니다. 따라서 epoll 버전의 이모가 수행하는 작업은 다음 코드로 나타낼 수 있습니다. Actipro CodeHighLight (프리웨어)에 의해 생성 된 코드
http : // www
500
);



typedef Union epoll_data {
void *ptr;
int fd;
__uint32_t u32;
__uint64_t u64;
}
struct
epoll_event {__uint32_t 이벤트 /*
Epoll events */epoll_data_t data; /*
사용자 데이터 변수 */}
epoll_data는 공용체 구조임을 알 수 있습니다. 에폴 버전 Mom 동급생 정보를 저장하는 데 사용되는 구조입니다. fd, 포인터 등 다양한 정보를 저장할 수 있습니다. 이 구조를 사용하면 epoll 이모는 아무런 노력 없이도 동급생 A를 찾을 수 있습니다.
대규모로 이러한 효율성을 과소평가하지 마세요. 동시 서버에서 폴링 IO는 가장 시간이 많이 걸리는 작업 중 하나입니다. 예를 들어, 친구가 올 때마다 건물 관리자가 건물 전체의 동급생에게 쿼리를 해야 한다면 처리 효율성이 필연적으로 낮을 것입니다.


초기의 차단 IO 처리 모델을 비교해 보면 다중화 IO를 사용한 후 프로그램이 자유롭게 자체 처리를 수행할 수 있음을 알 수 있습니다. IO 작업 이외의 작업에 대해서는 다중화 IO만 수행됩니다. IO 상태가 변경되면 이를 알려주고, IO 상태가 변경될 때까지 차단하고 기다릴 필요 없이 해당 작업을 수행합니다.

위 분석에서도 알 수 있듯이 실제로 select보다 epoll의 개선이 더 크다는 것을 알 수 있습니다. 시간과 공간을 교환한다는 아이디어의 구체적인 적용.


더 많은 Nginx 관련 기술 기사를 보려면

Nginx Tutorial 칼럼을 방문하여 알아보세요!

위 내용은 nginx가 왜 그렇게 빠른가요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.