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
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
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
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
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)
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!

DependencyinjectioninPHPisadesignpatternthatenhancesflexibility,testability,andmaintainabilitybyprovidingexternaldependenciestoclasses.Itallowsforloosecoupling,easiertestingthroughmocking,andmodulardesign,butrequirescarefulstructuringtoavoidover-inje

PHP performance optimization can be achieved through the following steps: 1) use require_once or include_once on the top of the script to reduce the number of file loads; 2) use preprocessing statements and batch processing to reduce the number of database queries; 3) configure OPcache for opcode cache; 4) enable and configure PHP-FPM optimization process management; 5) use CDN to distribute static resources; 6) use Xdebug or Blackfire for code performance analysis; 7) select efficient data structures such as arrays; 8) write modular code for optimization execution.

OpcodecachingsignificantlyimprovesPHPperformancebycachingcompiledcode,reducingserverloadandresponsetimes.1)ItstorescompiledPHPcodeinmemory,bypassingparsingandcompiling.2)UseOPcachebysettingparametersinphp.ini,likememoryconsumptionandscriptlimits.3)Ad

Dependency injection provides object dependencies through external injection in PHP, improving the maintainability and flexibility of the code. Its implementation methods include: 1. Constructor injection, 2. Set value injection, 3. Interface injection. Using dependency injection can decouple, improve testability and flexibility, but attention should be paid to the possibility of increasing complexity and performance overhead.

Implementing dependency injection (DI) in PHP can be done by manual injection or using DI containers. 1) Manual injection passes dependencies through constructors, such as the UserService class injecting Logger. 2) Use DI containers to automatically manage dependencies, such as the Container class to manage Logger and UserService. Implementing DI can improve code flexibility and testability, but you need to pay attention to traps such as overinjection and service locator anti-mode.

Thedifferencebetweenunset()andsession_destroy()isthatunset()clearsspecificsessionvariableswhilekeepingthesessionactive,whereassession_destroy()terminatestheentiresession.1)Useunset()toremovespecificsessionvariableswithoutaffectingthesession'soveralls

Stickysessionsensureuserrequestsareroutedtothesameserverforsessiondataconsistency.1)SessionIdentificationassignsuserstoserversusingcookiesorURLmodifications.2)ConsistentRoutingdirectssubsequentrequeststothesameserver.3)LoadBalancingdistributesnewuser

PHPoffersvarioussessionsavehandlers:1)Files:Default,simplebutmaybottleneckonhigh-trafficsites.2)Memcached:High-performance,idealforspeed-criticalapplications.3)Redis:SimilartoMemcached,withaddedpersistence.4)Databases:Offerscontrol,usefulforintegrati


Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

Video Face Swap
Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Article

Hot Tools

WebStorm Mac version
Useful JavaScript development tools

SublimeText3 English version
Recommended: Win version, supports code prompts!

SublimeText3 Mac version
God-level code editing software (SublimeText3)

PhpStorm Mac version
The latest (2018.2.1) professional PHP integrated development tool

Safe Exam Browser
Safe Exam Browser is a secure browser environment for taking online exams securely. This software turns any computer into a secure workstation. It controls access to any utility and prevents students from using unauthorized resources.
