首页 > 后端开发 > 正文

php框架io多路复用 IO 多路复用 是什么意思

2023-09-26 11:00:05 | 我爱编程网

今天我爱编程网小编为大家带来了php框架io多路复用 IO 多路复用 是什么意思,希望能帮助到大家,一起来看看吧!

php框架io多路复用 IO 多路复用 是什么意思

IO多路复用的作用

1、阻塞 I/O 只能阻塞一个 I/O 操作,而 I/O 复用模型能够阻塞多个 I/O 操作,所以才叫做多路复用

2、采用epoll模型时创建了一个共享的内存空间,操作系统采用事件通知的方式,使一个进程能同时等待多个文件描述符

3、这样就可以同时监听多个网络连接 IO, 相对于多进程、多线程切换的开销问题,IO 多路复用可以极大的提升系统效率。

为什么客户端先调close(),而服务器不能先调?

1、因为先调close()的一方最终要等2分钟之后才能释放资源,这段期间是不允许用bind的方式重新绑定端口的,就会出现端口被占用的情况

2、而客户端的端口是操作系统随机分配的,被占用之后会再分配一个

3、若服务端先调,则需要设定套接字选项,配置重复利用端口资源才可以

php框架io多路复用 IO 多路复用 是什么意思

IO 多路复用 是什么意思

答案可能有点长,回答这个问题首先得知道,什么是socket?

一、什么是socket?

我们都知道unix(like)世界里,一切皆文件,而文件是什么呢?文件就是一串二进制流而已,不管socket,还是FIFO、管道、终端,对我们来说,一切都是文件,一切都是流。在信息 交换的过程中,我们都是对这些流进行数据的收发操作,简称为I/O操作(input and output),往流中读出数据,系统调用read,写入数据,系统调用write。不过话说回来了 ,计算机里有这么多的流,我怎么知道要操作哪个流呢?对,就是文件描述符,即通常所说的fd,一个fd就是一个整数,所以,对这个整数的操作,就是对这个文件(流)的操作。我们创建一个socket,通过系统调用会返回一个文件描述符,那么剩下对socket的操作就会转化为对这个描述符的操作。不能不说这又是一种分层和抽象的思想。

二、阻塞?

什么是程序的阻塞呢?想象这种情形,比如你等快递,但快递一直没来,你会怎么做?有两种方式:

三、I/O多路复用 我爱编程网

好了,我们讲了这么多,再来总结一下,到底什么是I/O多路复用。
先讲一下I/O模型:
首先,输入操作一般包含两个步骤:

  • 等待数据准备好(waiting for data to be ready)。对于一个套接口上的操作,这一步骤关系到数据从网络到达,并将其复制到内核的某个缓冲区。

  • 将数据从内核缓冲区复制到进程缓冲区(copying the data from the kernel to the process)。

  • 其次了解一下常用的3种I/O模型:

    1、阻塞I/O模型

    最广泛的模型是阻塞I/O模型,默认情况下,所有套接口都是阻塞的。 进程调用recvfrom系统调用,整个过程是阻塞的,直到数据复制到进程缓冲区时才返回(当然,系统调用被中断也会返回)。

    2、非阻塞I/O模型

    当我们把一个套接口设置为非阻塞时,就是在告诉内核,当请求的I/O操作无法完成时,不要将进程睡眠,而是返回一个错误。当数据没有准备好时,内核立即返回EWOULDBLOCK错误,第四次调用系统调用时,数据已经存在,这时将数据复制到进程缓冲区中。这其中有一个操作时轮询(polling)。

    3、I/O复用模型

    此模型用到select和poll函数,这两个函数也会使进程阻塞,select先阻塞,有活动套接字才返回,但是和阻塞I/O不同的是,这两个函数可以同时阻塞多个I/O操作,而且可以同时对多个读操作,多个写操作的I/O函数进行检测,直到有数据可读或可写(就是监听多个socket)。select被调用后,进程会被阻塞,内核监视所有select负责的socket,当有任何一个socket的数据准备好了,select就会返回套接字可读,我们就可以调用recvfrom处理数据。
    正因为阻塞I/O只能阻塞一个I/O操作,而I/O复用模型能够阻塞多个I/O操作,所以才叫做多路复用。

php框架io多路复用 IO 多路复用 是什么意思

NIO和IO多路复用

常用ByteBuffer

读完之后可能重新用buffer来写,使用 clear 重新设置

当读到第5个数据时先mark一下,读到10时reset一下就可以实现重新从第5个数据读 mark reset .就是将position的位置记录一下,等会再修改回来.

SocketChannel和ServerSocketChannel

可以监听多个Channel
可以监听channel的读事件,写事件,建立连接的事件
selectionKey = channel.register(selector,read) 将通道注册到selector上,并监听可读的请求.
之后可以通过 Set<SelectionKey> selectedKeys = selector.selectedKeys(); 获取SelectionKey的集合,通过遍历处理事件(如果是连接请求,创建一个新的SocketChannel并注册到selector上,如果是可读的事件,调用 channel.read(buffer) 接收数据)
举例

Selector封装了后面三种方式,对于linux来讲,可能用的其中一个

一个进程管理多个socket的连接

以上就是我爱编程网整理的php框架io多路复用 IO 多路复用 是什么意思相关内容,想要了解更多信息,敬请查阅我爱编程网。
与“php框架io多路复用 IO 多路复用 是什么意思”相关推荐
php框架的设计思路 如何写一个PHP框架呢?思路是什么,需要注意些什么?
php框架的设计思路 如何写一个PHP框架呢?思路是什么,需要注意些什么?

php知识框架总结php知识框架总结篇一:php基础知识点总结PHP语言基础简单整理1.开始结束标记的格式只有在没有判断语句时才能使用。对表单传递的变量进行编码和解码:PHP中实现对查询字符串进行URL编码可以通过函数urlencode()实现,该函数的使用格式如下:stringurlencode(stringstr);对URL编码后的查询字符串进行解码,可以通

2023-09-22 05:12:39
php用框架反而变得复杂 什么是php框架?
php用框架反而变得复杂 什么是php框架?

什么是php框架?php框架对很多新手而言可能会觉得很难攀越,其实不然,只要知道一个框架的流程,明白原理了,基本类似框架都可以看懂,php框架真正的发展要从php5开始了,其实php4时代就有一些框架,但是因为框架并没有给大家带来多方便而觉得很复杂,速度没有纯php好,所以一直到了php5才有大的发展,php5的面向对象模型的修改对框架的发展起了很大的作用。2php框架介绍框架

2023-10-03 06:47:37
如何利用php框架 如何写一个PHP框架呢?思路是什么,需要注意些什么?
如何利用php框架 如何写一个PHP框架呢?思路是什么,需要注意些什么?

PHP新手该如何学习使用开发框架,有案例吗?关于PHP新手该如何学习使用开发框架,有案例吗,我有下面的观点。步骤1:PHP基础知识。如果你想在Web开发中建立一个未来,习得任何语言都需要一个坚实的语法基础,而HTML和CSS是基本技能。在PHP中:知识:容易掌握PHP的基本知识,了解PHP变量、变量类型、常量,如概念、PHP操作符理解和掌握PHP序列结构、结构条件、三种

2023-09-14 09:57:13
php框架常用写法 如何写一个PHP框架呢?思路是什么,需要注意些什么?
php框架常用写法 如何写一个PHP框架呢?思路是什么,需要注意些什么?

如何写一个PHP框架呢?思路是什么,需要注意些什么?第一步实现自动加载第二步实现依赖注入容器第三步实现路由第四步实现控制器第五步实现模型第六步实现最基本的一些辅助操作类1.Db类,数据库操作少不了2.数据操作类,接收过滤getpostputdelete等数据3.配置文件操作类,任何一个框架都少不了,是吧。4.模板引擎,如果是前后端分离的

2023-09-14 18:34:27
php框架写多原生忘了 如何写一个PHP框架呢?思路是什么,需要注意些什么?
php框架写多原生忘了 如何写一个PHP框架呢?思路是什么,需要注意些什么?

php需要掌握几个框架PHP常用框架对比一、CI框架CI框架是一个简单快速的PHPMVC轻量级框架,它执行效率高,快速简洁,代码量少,适合中小型项目开发,也可以做大型项目,但扩展能力不是很好。优势:框架比较简单,适合入门开发,易学,上手快,静态化很容易,文档比较详细。缺点:由于框架较小,所以功能不完全,比如使用mongoDB就要自己实现接口,对数据库的操作不够安全(写入操

2023-09-27 12:12:42
php框架路由怎么写 如何写一个PHP框架呢?思路是什么,需要注意些什么?
php框架路由怎么写 如何写一个PHP框架呢?思路是什么,需要注意些什么?

如何写一个PHP框架呢?思路是什么,需要注意些什么?第一步实现自动加载第二步实现依赖注入容器第三步实现路由第四步实现控制器第五步实现模型第六步实现最基本的一些辅助操作类1.Db类,数据库操作少不了2.数据操作类,接收过滤getpostputdelete等数据3.配置文件操作类,任何一个框架都少不了,是吧。4.模板引擎,如果是前后端分离的

2023-09-15 15:48:13
php框架到底怎么用 如何写一个PHP框架呢?思路是什么,需要注意些什么?
php框架到底怎么用 如何写一个PHP框架呢?思路是什么,需要注意些什么?

php需要学习哪些框架PHP需要学习哪些框架呢?让我们一起了解一下!PHP需要学习的框架有很多,下面为您例举几种常用的框架:国内框架:ThinkPHP、Canphp、KYPHP、InitPHP、SpeedPHP、CdvPHP等。国外框架:ZendFramework、Codelgniter、CakePHP、Symfony、Yii、Seagull、Laravel等。拓展:什么

2023-09-28 02:12:13
php框架及思想 如何写一个PHP框架呢?思路是什么,需要注意些什么?
php框架及思想 如何写一个PHP框架呢?思路是什么,需要注意些什么?

PHP是什么-PHP的架构及原理概述记得我刚开始学习PHP的时候,许多面试官会经常问我PHP是什么,那时的标准回答是PHP是一种弱类型动态脚本编程语言,开源,免费,是超文本预处理器的缩写。这只是很浅的解释,PHP对我来说是一个工具,是我手里的一把锤子,虽然这把锤子时常被调侃为两边都是起钉器的锤子。多进程模型PHP是以多进程模型设计的,这样的好处是请求之间互不干涉,一个请求

2023-09-09 12:48:31