Home Backend Development PHP Tutorial PHP7 Kernel Analysis 2 I/O Model

PHP7 Kernel Analysis 2 I/O Model

Apr 13, 2018 pm 02:50 PM
php php7 Model

The content of this article is about the I/O model of PHP7 Kernel Analysis 2. Now I share it with you. Friends in need can refer to it

1. Synchronization: My client (C side) The caller) is a function that does not end before I die waiting for the result.
2. Asynchronous: I (the c-side caller) calls a function and does not know the result of the function. After the function has the result, I will be notified, that is, callback notification
3. Blocking: It means calling me (the s-side is called (or, function), I (s-side callee, function) will not return until I have completely accepted the data or gotten the result.
4. Non-blocking: Just call me (callee on s side, function), I (callee on s side, function) will return immediately, and notify the caller after getting the result

Five I/O models

(1) Blocking I/O

PHP7 Kernel Analysis 2 I/O Model

When When the user process makes a system call, the kernel starts the first stage of I/O and prepares data into the buffer. When the data is prepared, the data is copied from the kernel buffer to the memory of the user process. At this time, the user process is released from the block state and runs again.

(2) Non-Blocking I/O

PHP7 Kernel Analysis 2 I/O Model

The user process can only The stage is blocked, and the first stage is not blocked. However, in the first stage, the user process does not need to wait blindly and constantly polls the kernel to see if the data is ready. Therefore, this model consumes more CPU. of.

(3) I/O Multiplexing

PHP7 Kernel Analysis 2 I/O Model

Both stages of I/O execution are Both user processes are blocked, but the two stages are independent. In a complete I/O operation, the user process initiates two system calls. Different from blocking I/O, the first segment can wait for multiple descriptors to be ready

(4) Signal Driven I/O

PHP7 Kernel Analysis 2 I/O Model

Only the user process is blocked in the second stage of I/O execution, but there is no blocking in the first stage. In the first stage of I/O execution, this model will actively notify the user process that the data has been prepared after the data preparation is completed, that is, make a callback to the user process. There are two types of notifications, one is horizontal triggering, that is, notifications will be sent all the time if the user process does not respond, and the other is edge triggering, which is only notified once.

(5) Asynchronous I/O (Asynchrnous I/O)

PHP7 Kernel Analysis 2 I/O Model

When the user process initiates a system call, it immediately You can start to do other things, and then until both stages of I/O execution are completed, the kernel will send a notification to the user process to tell the user process that the operation has been completed.

I/O multiplexing technology

select

(1) The mechanism of .select() provides a data structure of fd_set, Each element can establish a connection with an open file handle (whether it is a Socket handle, other file or named pipe or device handle). The work of establishing the connection is completed by the programmer. When select() is called, the kernel determines the connection according to the IO The status modifies the content of fd_set, thereby notifying the process that executed select() which Socket or file is readable or writable. Mainly used for Socket communication.

(2). After the program executes select, if there is no data input, the program will wait (when blocked) until there is data, that is, there is no need for loops and sleep in the program.

(3). Every time select is called, the fd_set collection needs to be copied from user mode to kernel mode. This overhead will be very large when there are many fd_sets.

(4). At the same time, every time Calling select requires the kernel to traverse all fd_sets passed in. This overhead is also very large when there are many fd_sets.

(5). The number of file descriptors supported by select is too small. The default is 1024

poll

(1). The implementation of poll is very similar to select, except that the way to describe the fd_set collection is different. Poll uses the pollfd linked list structure instead of the fd_set structure of select. Everything else is similar.

(2). There is no upper limit on the number of monitoring descriptors;

epoll/kqueue

(1). There is no upper limit on the number of monitoring descriptors;
(2 ). The efficiency is improved, it is not a polling method, and the efficiency will not decrease as the number of fd increases. Only active and available fds will call the callback function; that is, the biggest advantage of epoll/kqueue is that it only cares about your "active" connections and has nothing to do with the total number of connections. Therefore, in the actual network environment, the efficiency of epoll/kqueue will be Much higher than select and poll.
(3). Memory copy, use mmap() file mapping memory to accelerate message passing with kernel space;

Related recommendations:

PHP7 Kernel Analysis 1 CGI and FastCGI

The above is the detailed content of PHP7 Kernel Analysis 2 I/O Model. For more information, please follow other related articles on the PHP Chinese website!

Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

AI Hentai Generator

AI Hentai Generator

Generate AI Hentai for free.

Hot Article

R.E.P.O. Energy Crystals Explained and What They Do (Yellow Crystal)
3 weeks ago By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Best Graphic Settings
3 weeks ago By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. How to Fix Audio if You Can't Hear Anyone
3 weeks ago By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: How To Unlock Everything In MyRise
4 weeks ago By 尊渡假赌尊渡假赌尊渡假赌

Hot Tools

Notepad++7.3.1

Notepad++7.3.1

Easy-to-use and free code editor

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use

Zend Studio 13.0.1

Zend Studio 13.0.1

Powerful PHP integrated development environment

Dreamweaver CS6

Dreamweaver CS6

Visual web development tools

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)

PHP 8.4 Installation and Upgrade guide for Ubuntu and Debian PHP 8.4 Installation and Upgrade guide for Ubuntu and Debian Dec 24, 2024 pm 04:42 PM

PHP 8.4 brings several new features, security improvements, and performance improvements with healthy amounts of feature deprecations and removals. This guide explains how to install PHP 8.4 or upgrade to PHP 8.4 on Ubuntu, Debian, or their derivati

How To Set Up Visual Studio Code (VS Code) for PHP Development How To Set Up Visual Studio Code (VS Code) for PHP Development Dec 20, 2024 am 11:31 AM

Visual Studio Code, also known as VS Code, is a free source code editor — or integrated development environment (IDE) — available for all major operating systems. With a large collection of extensions for many programming languages, VS Code can be c

How do you parse and process HTML/XML in PHP? How do you parse and process HTML/XML in PHP? Feb 07, 2025 am 11:57 AM

This tutorial demonstrates how to efficiently process XML documents using PHP. XML (eXtensible Markup Language) is a versatile text-based markup language designed for both human readability and machine parsing. It's commonly used for data storage an

Explain JSON Web Tokens (JWT) and their use case in PHP APIs. Explain JSON Web Tokens (JWT) and their use case in PHP APIs. Apr 05, 2025 am 12:04 AM

JWT is an open standard based on JSON, used to securely transmit information between parties, mainly for identity authentication and information exchange. 1. JWT consists of three parts: Header, Payload and Signature. 2. The working principle of JWT includes three steps: generating JWT, verifying JWT and parsing Payload. 3. When using JWT for authentication in PHP, JWT can be generated and verified, and user role and permission information can be included in advanced usage. 4. Common errors include signature verification failure, token expiration, and payload oversized. Debugging skills include using debugging tools and logging. 5. Performance optimization and best practices include using appropriate signature algorithms, setting validity periods reasonably,

PHP Program to Count Vowels in a String PHP Program to Count Vowels in a String Feb 07, 2025 pm 12:12 PM

A string is a sequence of characters, including letters, numbers, and symbols. This tutorial will learn how to calculate the number of vowels in a given string in PHP using different methods. The vowels in English are a, e, i, o, u, and they can be uppercase or lowercase. What is a vowel? Vowels are alphabetic characters that represent a specific pronunciation. There are five vowels in English, including uppercase and lowercase: a, e, i, o, u Example 1 Input: String = "Tutorialspoint" Output: 6 explain The vowels in the string "Tutorialspoint" are u, o, i, a, o, i. There are 6 yuan in total

7 PHP Functions I Regret I Didn't Know Before 7 PHP Functions I Regret I Didn't Know Before Nov 13, 2024 am 09:42 AM

If you are an experienced PHP developer, you might have the feeling that you’ve been there and done that already.You have developed a significant number of applications, debugged millions of lines of code, and tweaked a bunch of scripts to achieve op

Explain late static binding in PHP (static::). Explain late static binding in PHP (static::). Apr 03, 2025 am 12:04 AM

Static binding (static::) implements late static binding (LSB) in PHP, allowing calling classes to be referenced in static contexts rather than defining classes. 1) The parsing process is performed at runtime, 2) Look up the call class in the inheritance relationship, 3) It may bring performance overhead.

How to automatically set permissions of unixsocket after system restart? How to automatically set permissions of unixsocket after system restart? Mar 31, 2025 pm 11:54 PM

How to automatically set the permissions of unixsocket after the system restarts. Every time the system restarts, we need to execute the following command to modify the permissions of unixsocket: sudo...

See all articles