swoolei/o模型

lijianming180 lijianming180     2023-04-24     543

关键词:

I/O即Input/Output,输入和输出的意思。在计算机的世界里,涉及到数据交换的地方,比如磁盘、网络等,就需要I/O接口。

通常,I/O是相对的。比如说你打开浏览器,通过网络I/O获取我们网站的网页,浏览器首先会往服务器发送请求,这是一个Output操作,随后服务器给浏览器返回信息,这就是一个Input操作。以上都是基于浏览器而言。但是,有些操作就比较特殊。比如程序在运行时,数据被加载在内存中,通过程序往磁盘写数据,对内存而言,这就是单方面的的Output。
I/O模型通常有很多种,我们简单介绍下同步I/O和异步I/O。

同步I/O

  • 实际上我们刚刚介绍的浏览器请求服务器的过程正是同步I/O的例子。
  • 那我们再比如,假设我们要通过程序往磁盘写大量的数据,如果没有磁盘I/O操作,php程序在内存中执行的速度是非常快的,但是磁盘写数据的过程相对而言就是漫长的,CPU就需要等待磁盘I/O操作之后才能继续执行其他代码,像上面这两种情况,我们都称之为同步I/O。

php本身是单线程的,当php进程被挂起的时候,像上面的读取磁盘数据,往磁盘写数据,在I/O操作之前php代码就没办法继续执行了。
因为I/O操作阻塞了当前线程,如果某用户也想从磁盘上读取或者写数据,就需要等待。

有些人要反驳了,这不对呀,我经历不是这样的,很多人可以同时 大专栏  swoole I/O 模型访问我的网站,这没问题的。
这个没必要纠结,php本身是单进程单线程的,用户可以同时访问你的网站实际上是web服务器的功劳。这就是我们之前讨论过的,如何解决多任务的问题。
web服务器的进程模型暂时不多讨论,免得懵。
如果不考虑web服务器,是不是当前进程一旦阻塞,其他人访问php都会被阻塞啦?答案是肯定的。要解决这个问题,又回到我们一直强调的多进程或者多线程。

但是,如果为了解决并发问题,系统开启了大量的进程,就像我们之前说的,操作系统在进程或者线程间切换同样会造成CPU大量的开销。有没有更好的解决方案呢?

异步I/O

答案就是异步I/O。我们再来强调一遍异步I/O是要解决什么问题的:同一线程内,执行一些耗时的任务时,其他代码是不能继续执行的,要等待该任务操作完之后才可以。

同步I/O和异步I/O区别

同步I/O模型下,主线程只能被挂起等待,但是在异步I/O模型中,主线程发起I/O指令后,可以继续执行其他指令,没有被挂起,也没有切换线程的操作。由此看来,使用异步I/O明显可以提高了系统性能。

其实I/O模型远不止我们介绍的这两种,有兴趣的可以借助google更深层次的了解一下。

东软软件工程2软件开发模型瀑布模型原型模型螺旋模型统一过程模型rup敏捷开发模型

软件开发过程模型瀑布模型原型模型螺旋模型统一过程模型-RUP敏捷开发模型敏捷开发模型:Scrum方法敏捷开发模型:进行Scrum开发 查看详情

参数模型非参数模型生成模型判别模型

1.参数模型参数模型(parametricmodels)与非参数模型(Nonparametricmodels)的主要区别在于:对于数据分布的假设不同。参数模型对于数据分布(datadistribution)是有假设的,而非参数模型对于数据分布是假设自由的(distributionfree)。因此... 查看详情

逻辑数据模型之层次数据模型网状数据模型和关系数据模型

  上一篇文章简单介绍了概念数据模型、逻辑数据模型、物理数据模型的基本概念、特性以及三者所对应的数据库的开发阶段。现在针对逻辑数据模型中所用到的三种数据模型---层次数据模型、网状数据模型以及关系数据模型... 查看详情

css布局模型(流动模型浮动模型层模型)

在网页中,元素有三种布局模型:1、流动模型(Flow)default,就是块级元素都自上而下的分布,宽度都为100%。内联元素都从左到右水平分布。2、浮动模型(Float)div、p、table、img等元素都可以设置为浮动。两个div显示在一行的代码... 查看详情

块模型内联模型内联块模型

块模型(block模型)1.块模型被浏览器渲染执行的时候会独占一行空间2.即使块模型的宽度小于页面的宽度,块模型也会独占一行,也就是说块模型独占与它的宽度有关3.如果要为一个html控件设置高度和宽度,那么这个控件必须是... 查看详情

python基于statsmodels包构建多元线性回归模型:模型构建模型解析模型推理预测

Python基于statsmodels包构建多元线性回归模型:模型构建、模型解析、模型推理预测目录 查看详情

[gpt]序列模型分类及其模型方案选择

 序列模型可以分为两大类:线性序列模型和非线性序列模型。线性序列模型:这类模型基于线性关系对时间序列进行建模和预测。常见的线性序列模型包括自回归模型(AR)、移动平均模型(MA)和自回归移动平均模型(ARMA... 查看详情

判断一个模型是pytorch模型还是tensorflow模型还是scikit模型

】判断一个模型是pytorch模型还是tensorflow模型还是scikit模型【英文标题】:Determinewhetheramodelispytorchmodeloratensorflowmodelorscikitmodel【发布时间】:2021-02-2703:36:00【问题描述】:如果我想确定模型的类型,即它是从哪个框架以编程方式... 查看详情

领域模型贫血模型充血模型概念总结

 1.      领域模型  领域模型是对领域内的概念类或现实世界中对象的可视化表示。又称概念模型、领域对象模型、分析对象模型。它专注于分析问题领域本身,发掘重要的业务领域概念,并建立业务领域概念之间... 查看详情

判别模型和生成模型

【摘要】    -生成模型:无穷样本==》概率密度模型=产生模型==》预测   -判别模型:有限样本==》判别函数=预测模型==》预测【简介】简单的说,假设o是观察值,q是模型。如果对P(o|q)建模,就是生成模... 查看详情

[hive]维度模型分类:星型模型,雪花模型,星座模型|范式

一、维度模型分类:星型模型,雪花模型,星座模型1、星型模型星型模型中只有一张事实表,以及0张或多张维度表,事实与纬度表通过主键外键相关联,维度之间不存在关联关系,当所有纬度都关联到事实表时,... 查看详情

生成模型和判别模型

对于输入x,类别标签Y:判别模型:由数据直接学习决策面Y=f(x)或条件概率P(Y|x)作为预测模型生成模型:由数据学习联合概率分布P(x,Y),然后求出条件概率P(Y|x)作为预测模型 模型区别:判别模型寻找不同类别之间的分离面,反... 查看详情

生成模型与判别模型区别

...法可分为两大类,即生成方法与判别方法,它们所学到的模型称为生成模型与判别模型。判别模型:判别模型是学得一个分类面(即学得一个模型),该分类面可用来区分不同的数据分别属于哪一类;生成模型:生成模型是学得... 查看详情

css盒模型

CSS盒模型CSSCSS盒模型基本概念:标准模型+IE模型标准模型和IE模型的区别标准模型IE模型二者区别,前者的宽度是内容宽度,后者的宽度是内容+内边距+borderCSS如何设置这两种模型-标准模型:box-sizing:content-box;-IE模型:box-sizing:border-b... 查看详情

软件开发模型

典型的开发模型有:1.边做边改模型(Build-and-FixModel);2.瀑布模型(WaterfallModel);3.快速原型模型(RapidPrototypeModel);4.增量模型(IncrementalModel);5.螺旋模型(SpiralModel);6.演化模型(evolutionmodel);7.喷泉模型(fountainmodel);8.... 查看详情

为相关模型管理员创建代理模型的类别模型

】为相关模型管理员创建代理模型的类别模型【英文标题】:ACategorymodelwhichcreatesproxymodelsforrelatedmodeladmin【发布时间】:2013-12-1316:20:38【问题描述】:所以我在尝试创建一个模型来定义动态代理模型来管理管理站点中的相关模型... 查看详情

数据模型

数据模型模型是对现实世界的抽象。在数据库技术中,我们用模型(datamodel)的概念描述数据库的结构和语义,对现实世界的数据进行抽象。从现实世界的信息到数据库存储的数据以及用户使用的数据是一个逐步抽象的过程,根... 查看详情

生成模型和判别模型

1、定义:生成模型(或称产生式模型)和判别模型(或称判别式模型)的本质区别在于模型中观测序列x和状态序列y的决定关系。前者假设y决定x,后者假设x决定y。2、生成模型特点2.1、生成模型以“状态序列y按照一定的规律生... 查看详情