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

PHP7 커널 분석의 I/O 모델

Apr 02, 2019 am 10:58 AM

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

인기 기사

R.E.P.O. 에너지 결정과 그들이하는 일 (노란색 크리스탈)
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 최고의 그래픽 설정
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 아무도들을 수없는 경우 오디오를 수정하는 방법
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25 : Myrise에서 모든 것을 잠금 해제하는 방법
4 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)