码迷,mamicode.com
首页 > 其他好文 > 详细

swoole I/O 模型

时间:2020-01-21 23:38:41      阅读:117      评论:0      收藏:0      [点我收藏+]

标签:计算   ref   lan   同步   这不   过程   开启   https   cpu   

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更深层次的了解一下。

swoole I/O 模型

标签:计算   ref   lan   同步   这不   过程   开启   https   cpu   

原文地址:https://www.cnblogs.com/lijianming180/p/12227153.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!