>백엔드 개발 >PHP 튜토리얼 >nginx sendfile 매개변수 설명

nginx sendfile 매개변수 설명

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB원래의
2016-07-29 09:05:171094검색

파일 보내기
요즘 널리 사용되는 웹 서버는 서버 성능을 향상시키기 위해 sendfile 옵션을 제공합니다. 그러면 sendfile이 정확히 무엇이며 성능에 어떤 영향을 줍니까? sendfile은 실제로 Linux 2.0 이후에 실행되는 시스템 호출입니다. 웹 서버는 자체 구성을 조정하여 sendfile 시스템 호출을 사용할지 여부를 결정할 수 있습니다. 먼저 sendfile이 없는 기존 네트워크 전송 프로세스를 살펴보겠습니다.
읽기(파일,tmp_buf,len)
쓰기(소켓,tmp_buf, len)
하드 디스크 >> 커널 버퍼 >> 사용자 버퍼 >> 커널 소켓 버퍼
일반적으로 네트워크 응용 프로그램은 하드 디스크에서 데이터를 읽은 다음 해당 데이터를 소켓에 쓰는 방식으로 네트워크 전송을 완료합니다. 위의 두 줄의 코드는 이 점을 설명하지만 위의 간단한 두 줄의 코드는 많은 기본 작업을 다룹니다. 맨 아래 레이어가 위의 두 줄의 코드를 어떻게 실행하는지 살펴보겠습니다.
1. 시스템 호출 read()는 컨텍스트 전환을 생성합니다. 즉, 사용자 모드에서 커널 모드로 전환한 다음 DMA는 복사를 수행하여 하드 디스크의 파일 데이터를 커널 버퍼로 읽습니다.
2. 커널 버퍼에서 사용자 버퍼로 데이터가 복사된 후 시스템은 read()를 호출하여 반환합니다. 이 때 커널 모드에서 사용자 모드로 전환되는 컨텍스트 전환이 발생합니다.
3. 시스템은 write()를 호출하여 컨텍스트 전환을 생성합니다. 사용자 모드에서 커널 모드로 전환한 다음 2단계에서 사용자 버퍼에서 읽은 데이터를 커널 버퍼에 복사합니다. 두 번째) 그러나 이번에는 커널 버퍼가 다릅니다. 이 버퍼는 소켓과 연결됩니다.
4. 시스템 호출 write()가 반환되어 컨텍스트 전환이 발생합니다. 커널 모드에서 사용자 모드로 전환한 다음(네 번째) DMA가 커널 버퍼에서 프로토콜 스택으로 데이터를 복사합니다(네 번째).
위의 4단계에는 4개의 컨텍스트 스위치와 4개의 복사본이 있습니다. 스위치와 복사본의 수를 줄일 수 있으면 성능이 효과적으로 향상된다는 것을 발견했습니다. kernel2.0 버전에서는 위의 단계를 단순화하고 성능을 향상시키기 위해 시스템 호출 sendfile()이 사용됩니다. sendfile()은 스위치 수뿐만 아니라 복사본 수도 줄일 수 있습니다.
네트워크 전송을 위해 sendfile()을 사용하는 과정을 살펴보겠습니다.
sendfile(소켓,파일,len)
하드 디스크 >> 커널 버퍼(커널 소켓 버퍼로 빠른 복사) >>프로토콜 스택
1. 시스템은 sendfile()을 호출하여 하드 디스크 데이터를 DMA를 통해 커널 버퍼에 복사한 다음, 해당 데이터는 커널에 의해 소켓과 관련된 다른 커널 버퍼에 직접 복사됩니다. 사용자 모드와 커널 모드 간 전환은 없습니다. 한 버퍼에서 다른 버퍼로의 복사는 커널에서 직접 완료됩니다.
2. DMA는 데이터를 커널 버퍼에서 프로토콜 스택으로 직접 복사합니다. 전환이 없으며 데이터가 커널에 있기 때문에 사용자 모드에서 커널 모드로 데이터를 복사할 필요가 없습니다.

기사 참조: http://www.th7.cn/system/lin/201306/41314.shtml

').addClass('pre-numbering').hide(); $(this).addClass('has-numbering').parent().append($numbering); for (i = 1; i ').text(i)); }; $numbering.fadeIn(1700); }); });

위 내용은 관련 내용을 포함하여 nginx sendfile 매개변수에 대한 설명을 소개하고 있어 PHP 튜토리얼에 관심이 있는 친구들에게 도움이 되기를 바랍니다.

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