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 模型的更多相关文章

  1. swoole的进程模型架构

    swoole的强大之处就在与其进程模型的设计,既解决了异步问题,又解决了并行. 主线程MainReactor swoole启动后主线程会负责监听server socket,如果有新的连接accept, ...

  2. Swoole笔记(一)

    简介 Swoole是一个PHP扩展,提供了PHP语言的异步多线程服务器,异步TCP/UDP网络客户端,异步MySQL,异步Redis,数据库连接池,AsyncTask,消息队列,毫秒定时器,异步文件读 ...

  3. Swoole笔记(五)

    配置说明 $server->set(array( 'daemonize' => true, 'log_file' => '/www/log/swoole.log', 'reactor ...

  4. Swoole高效跟传统的web开发有什么区别?

    一.swoole的运行模式 Swoole高效跟传统的web开发有什么区别,除了传统的LAMP/LNMP同步开发模式,swoole的异步开发模式是怎么样的. 1.1.传统web开发模式 PHP web开 ...

  5. swoole运行模式加速laravel应用的详细介绍

    本篇文章给大家带来的内容是关于swoole运行模式加速laravel应用的详细介绍,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 一.Swoole Swoole号称重新定义了PHP, ...

  6. swoole| swoole 协程初体验 转

    swoole| swoole 协程初体验   date: 2018-5-30 14:31:38title: swoole| swoole 协程初体验description: 通过协程的执行初窥 swo ...

  7. swoole入门abc

    1. 入门abc 1.1 github账号添加 第一步依然是配置git用户名和邮箱 git config user.name "用户名" git config user.email ...

  8. Swoole 协程简介

    什么是协程 协程可以简单理解为线程,只不过这个线程是用户态的,不需要操作系统参与,创建.销毁和切换的成本都非常低. 协程不能利用多核 cpu,想利用多核 cpu 需要依赖 Swoole 的多进程模型. ...

  9. swoole2——Worker与TaskWorker进程

    1.swoole 的进程模型 swoole是一个多进程模型的框架,当启动一个进程swoole应用时,一共会创建2+n+m个线程,n为worker进程数,m为TaskWorker进程数,1个master ...

随机推荐

  1. 剑指offer【13】- 链表中倒数第k个结点

    输入一个链表,输出该链表中倒数第k个结点. /* public class ListNode { int val; ListNode next = null; ListNode(int val) { ...

  2. java合并一个文件夹下所有txt文件,输出到另一个txt

    最近写了个单元测试,递归调用方法,把同一个文件夹里所有的txt合并输出到一个txt文件.参考了两个博客,分别是已有的方法,还有个就是检测txt文件所用编码的技术贴.如果不检测txt文件的编码,那么转换 ...

  3. NSPredicate 应用

    //查询单词里面包含“ang”的字符串 NSArray *array = [[NSArray alloc]initWithObjects:@"beijing",@"sha ...

  4. 最大连续子序列(DP)

    Description 给定K个整数的序列{ N1, N2, ..., NK },其任意连续子序列可表示为{ Ni, Ni+1, ..., Nj },其中 1 <= i <= j < ...

  5. 迅为-IMX6开发板Android Eclipse 导入Led应用程序工程

    本小节给大家详细讲解如何导入 Android 应用的工程文件.先解压迅为“iTOP-IMX6-Android4.4-LED 测试程序 r”压缩包.如下图所示,解压出ledtest 文件夹.<ig ...

  6. Java使用Thrift,Thrift结构体定义

    1.Thrift定义文件,Thrift常见的数据类型 1.基本类型(括号内为对应的Java类型): bool(boolean): 布尔类型(TRUE or FALSE) byte(byte): 8位带 ...

  7. Hadoop_课堂笔记1

    1.课程目标 实践性 2.课下需要 在家搭建一个伪分布式 3.大数据概念和意义 08年Nature第一次正式提出大数据概念 常规的数据库:结构化的数据库 TB级的结构化数据管理就很困难,需要分布式 当 ...

  8. 吴裕雄--天生自然 PYTHON3开发学习:OS 文件/目录方法

    import os, sys # 假定 /tmp/foo.txt 文件存在,并有读写权限 ret = os.access("/tmp/foo.txt", os.F_OK) prin ...

  9. Codeforces 1295D Same GCDs

    题目链接 link Solution 这是一道结论题,有两个做法,分别用了欧拉函数或一点点莫比乌斯反演 (这里只放欧拉函数的做法) 设\(d=gcd(m,a)\) \[gcd(\frac{a}{d}, ...

  10. Web 自动化

    自动化:由机器设备代替人为自动完成指定目标的过程 自动化测试:由程序代替人为去验证程序功能的过程 为什么要进行自动化测试? 解决-回归测试 压力测试 兼容性测试 提高测试效率,保证产品质量 什么阶段开 ...