根据应用程序是否阻塞自身运行分为:
阻塞I/O:是指应用程序在执行I/O操作后,如果没有获得响应,
         就会阻塞当前线程,不能执行其他任务。
非阻塞I/O:是指应用程序在执行I/O操作后,不会阻塞当前线程,
           可以继续执行其他的任务
根据I/O响应方式的不同,可分为:
同步I/O:指收到I/O请求后,系统不会立刻响应应用程序,等到处理完成,系统
         才会通过系统调用的方式,告诉应用程序I/O的结果。
异步I/O:指收到I/O请求后,系统会先告诉应用程序I/O请求已经收到,随后去异步
         处理,等处理完成后,系统在通过事件通知的方式,告诉应用程序结果
        
阻塞,非阻塞和同步异步其实就是两个不同角度的I/O划分方式,它们描述的对象也不同;

阻塞非阻塞针对的是io调用者(即应用程序),而同步异步针对的是io执行者(即系统)。

举例如下:
同步异步
系统调用 read 是同步读,所以,在没有得到磁盘数据前,read 不会响应应用程序。
而 aio_read 是异步读,系统收到 AIO 读请求后不等处理就返回了,而具体的 read 结果,
再通过回调异步通知应用程序。

阻塞非阻塞
使用 send() 直接向套接字发送数据时,如果套接字没有设置 O_NONBLOCK 标识,
那么 send() 操作就会一直阻塞,当前线程也没法去做其他事情。
当然,如果你用了 epoll,系统会告诉你这个套接字的状态,那就可以用非阻塞的方式使用。
当这个套接字不可写的时候,你可以去做其他事情,比如读写其他套接字。

转载自:极客时间专栏。

阻塞I/O,非阻塞I/O,同步I/O,异步I/O的更多相关文章

  1. 网络IO模型:同步IO和异步IO,阻塞IO和非阻塞IO

    同步(synchronous) IO和异步(asynchronous) IO,阻塞(blocking) IO和非阻塞(non-blocking)IO分别是什么,到底有什么区别?这个问题其实不同的人给出 ...

  2. 转 网络IO模型:同步IO和异步IO,阻塞IO和非阻塞IO

    此文章为转载,如有侵权,请联系本人.转载出处,http://blog.chinaunix.net/uid-28458801-id-4464639.html 同步(synchronous) IO和异步( ...

  3. 简述同步IO、异步IO、阻塞IO、非阻塞IO之间的联系与区别

    POSIX 同步IO.异步IO.阻塞IO.非阻塞IO,这几个词常见于各种各样的与网络相关的文章之中,往往不同上下文中它们的意思是不一样的,以致于我在很长一段时间对此感到困惑,所以想写一篇文章整理一下. ...

  4. 同步IO、异步IO、阻塞IO、非阻塞IO之间的联系与区别

    POSIX 同步IO.异步IO.阻塞IO.非阻塞IO,这几个词常见于各种各样的与网络相关的文章之中,往往不同上下文中它们的意思是不一样的,以致于我在很长一段时间对此感到困惑,所以想写一篇文章整理一下. ...

  5. python网络编程-同步IO和异步IO,阻塞IO和非阻塞IO

    同步IO和异步IO,阻塞IO和非阻塞IO分别是什么,到底有什么区别?不同的人在不同的上下文下给出的答案是不同的.所以先限定一下本文的上下文. 本文讨论的背景是Linux环境下的network IO. ...

  6. Java基础知识强化之多线程笔记07:同步、异步、阻塞式、非阻塞式 的联系与区别

    1. 同步: 所谓同步,就是在发出一个功能调用时,在没有得到结果之前,该调用就不返回.但是一旦调用返回,就必须先得到返回值了. 换句话话说,调用者主动等待这个"调用"的结果. 对于 ...

  7. 阻塞IO、非阻塞IO、同步IO、异步IO等

    https://www.cnblogs.com/zingp/p/6863170.html 阅读目录 1 基础知识回顾 2 I/O模式 3 事件驱动编程模型 4 select/poll/epoll的区别 ...

  8. Linux下同步模式、异步模式、阻塞调用、非阻塞调用总结

    转自:http://www.360doc.com/content/13/0117/12/5073814_260691714.shtml 同步和异步:与消息的通知机制有关. 本质区别 现实例子 同步模式 ...

  9. 5种IO模型、阻塞IO和非阻塞IO、同步IO和异步IO

    POSIX 同步IO.异步IO.阻塞IO.非阻塞IO,这几个词常见于各种各样的与网络相关的文章之中,往往不同上下文中它们的意思是不一样的,以致于我在很长一段时间对此感到困惑,所以想写一篇文章整理一下. ...

  10. 阻塞式和非阻塞式IO

    有很多人把阻塞认为是同步,把非阻塞认为是异步:个人认为这样是不准确的,当然从思想上可以这样类比,但方式是完全不同的,下面说说在JAVA里面阻塞IO和非阻塞IO的区别 在JDK1.4中引入了一个NIO的 ...

随机推荐

  1. kingbase字符类数据类型和oracle字符类型的区别

    为兼容Oracle的数据类型,KingbaseES扩展了Oracle的NUMBER.VARCHAR2.CHAR(n)和DATE类型.该措施使得移植Oracle的Create Table等DDL语句时, ...

  2. 【故障公告】Kubernetes 集群节点宕机造成博客站点故障

    非常抱歉!今天 18:40-18:55 左右 Kubernetes 集群一台高配节点突然宕机,造成博客站点故障,访问时出现 502 Bad Gateway,由此给您带来麻烦麻烦,请您谅解. 发现故障并 ...

  3. C#获取enum描述信息

    public enum LogLevelEnum { [Description("未分配")] None = 0, [Description("非常重要")] ...

  4. K8s存储之Volume、PV、PVC、SC

    Volume Volume(存储卷)是Pod中能够被多个容器访问的共享目录.Kubernetes的Volume概念.用途和目的与Docker的Volume比较类似,但两者不能等价.首先,Kuberne ...

  5. RDD编程练习

    一.filter,map,flatmap练习: 1.读文本文件生成RDD lines 2.将一行一行的文本分割成单词 words 3.全部转换为小写 4.去掉长度小于3的单词 5.去掉停用词 6.练习 ...

  6. ABAP 写入批次特征值以及更新批次特征值

    需求 SAP启用了批次,需要在特征值中写入物料类型,区分该物料批次是用于研发的亦或是量产的,关于研发和量产标识我是坐在采购订单行项目增强中了,这里就不多赘述了,参考https://www.cnblog ...

  7. linux开放指定端口

      sudo ufw allow 端口号

  8. reids 启动方法

    ---恢复内容开始--- 在windows环境下启动redis服务,前提是你安装好了,启动如下: 一,进入redis的安装目录下,在地址栏输入"cmd",回车 二,然后会进入cmd ...

  9. python 使用异常来中断/暂停线程

    """"python 使用异常来中断/暂停线程h_thread 线程句柄stoptype 线程停止类型,返回1则正常中断了线程""" ...

  10. QML笔记——MouseArea的覆盖区域

    问题摘要: 初学QML,今天发现一个奇怪的现象,调用MouseArea的位置不同,结果不同. 1.一个简单的qml示例 Rectangle { id: root width: 320 height: ...