>  기사  >  백엔드 개발  >  PHP7 커널 분석의 I/O 모델

PHP7 커널 분석의 I/O 모델

藏色散人
藏色散人앞으로
2019-04-02 10:58:453104검색

1. 동기화: 내 클라이언트(C측 호출자)에는 함수가 끝나기 전에 결과를 기다립니다.

2. 비동기식: 나(C측 호출자)가 함수를 호출했는데 함수의 결과를 알 수 없습니다. 즉, 콜백 알림을 받게 됩니다.

3 차단: 이는 나(s 측의 호출 수신자, 함수)를 호출하는 것을 의미하며, 나(s 측 호출 수신자, 함수)는 데이터를 완전히 수락하거나 결과를 얻을 때까지 반환되지 않습니다.

4. Non-blocking: 나(s측 호출 수신자, 함수)를 호출하고, I(s측 호출 수신자, 함수)가 즉시 반환되고, 결과를 얻은 후 호출자에게 알리는 것을 의미합니다

다섯 가지 I/O 모델

(1) Blocking I/O(Blocking I/O)

PHP7 커널 분석의 I/O 모델

사용자 프로세스가 시스템 호출을 하면 커널은 I/O의 첫 번째 단계를 시작하고 데이터가 이후에 버퍼에 들어갈 준비를 합니다. 모든 준비가 완료되면 커널 버퍼에서 사용자 프로세스의 메모리로 데이터가 복사됩니다. 이때 사용자 프로세스는 블록 상태에서 해제되고 다시 실행됩니다.

(2) Non-Blocking I/O (Non-Blocking I/O)

PHP7 커널 분석의 I/O 모델

사용자 프로세스는 두 번째 단계에서만 차단되며, 첫 번째 단계에서는 차단되지 않지만 첫 번째 단계에서는 차단됩니다. 사용자 프로세스는 맹목적으로 기다릴 필요가 없으며 지속적으로 커널을 폴링하여 데이터가 준비되었는지 확인하므로 이 모델은 더 많은 CPU를 소비합니다.

(3) I/O Multiplexing

PHP7 커널 분석의 I/O 모델

I/O 실행의 두 단계 모두 사용자 프로세스에 의해 차단되지만 두 단계는 독립적이며 한 번의 완료로 완료될 수 있습니다. I/O 작업 중에 사용자는 프로세스가 두 개의 시스템 호출을 시작했습니다. I/O 차단과의 차이점은 첫 번째 단계에서는 여러 설명자가 준비될 때까지 기다릴 수 있다는 것입니다

(4) 신호 기반 I/O

PHP7 커널 분석의 I/O 모델

I/O 실행 단계의 두 번째 단계에서만 사용자 프로세스가 차단됩니다. , 첫 번째 단계에서는 차단이 없습니다. I/O 실행의 첫 번째 단계에서 이 모델은 데이터 준비가 완료된 후 데이터가 준비되었음을 사용자 프로세스에 적극적으로 알리는 즉, 사용자 프로세스에 콜백합니다. 알림에는 두 가지 유형이 있습니다. 하나는 사용자 프로세스가 응답하지 않으면 항상 알림이 전송되는 수평 트리거링이고, 다른 하나는 한 번만 알림을 받는 에지 트리거링입니다.

(5) 비동기 I/O(Asynchrnous I/O)

PHP7 커널 분석의 I/O 모델

사용자 프로세스가 시스템 호출을 시작하면 즉시 다른 작업을 시작할 수 있으며 I/O 실행의 두 단계가 모두 완료될 때까지 이후 , 커널은 작업이 완료되었음을 사용자 프로세스에 알리기 위해 사용자 프로세스에 알림을 보냅니다.

I/O 멀티플렉싱 기술

select

(1).select()는 fd_set의 데이터 구조를 제공하며, 각 요소는 열린 파일 핸들(소켓 핸들이든 다른 파일이든)과 연관될 수 있습니다. 접촉을 설정하기 위한 작업은 프로그래머에 의해 완료됩니다. select()가 호출되면 커널은 IO 상태에 따라 fd_set의 내용을 수정하여 select(를 실행한 프로그래머에게 알립니다. ) 프로세스에서 읽거나 쓸 수 있는 소켓 또는 파일. 주로 소켓 통신에 사용됩니다.

(2) 프로그램이 선택을 실행한 후 데이터 입력이 없으면 프로그램은 데이터가 있을 때까지 대기합니다(차단된 경우). 즉, 프로그램에서 루프 및 휴면이 필요하지 않습니다.

(3) select를 호출할 때마다 fd_set 컬렉션을 사용자 모드에서 커널 모드로 복사해야 합니다.

(4) 동시에 이 오버헤드는 매우 커집니다. select를 호출할 때 커널에서 이를 탐색하고 전달해야 합니다. fd_set가 많을 때 이 오버헤드도 매우 큽니다

(5). 작음, 기본값은 1024

poll

(1).poll 구현 및 선택 fd_set 컬렉션을 설명하는 방법이 다르다는 점을 제외하면 매우 유사합니다. poll은 select의 fd_set 구조 대신 pollfd 연결 목록 구조를 사용합니다. 다른 모든 것은 거의 동일합니다.

(2). 모니터링 설명자 수에 상한이 없습니다.

epoll/kqueue

(1) 모니터링 설명자 수에 상한이 없습니다.

(2). .fd 수가 증가해도 효율성은 감소하지 않습니다. 활성 상태이고 사용 가능한 fd만 콜백 함수를 호출합니다. 즉, epoll/kqueue의 가장 큰 장점은 "활성" 연결에만 관심이 있고 실제 네트워크에서는 총 연결 수와 관련이 없다는 것입니다. 환경에서는 epoll/kqueue의 효율성이 select 및 poll보다 훨씬 높습니다.

(3). 커널 공간을 통한 메시지 전달을 가속화하기 위해 mmap() 파일 매핑 메모리를 사용하는 메모리 복사;

위 내용은 PHP7 커널 분석의 I/O 모델의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 segmentfault.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제