一、什么是阻塞、非阻塞、同步、异步

  我们以A线程调用B线程的过程例子来讲解这四个概念

  在一个程序里,A调用B了,此时如果是

  同步:

  A必须等待B返回结果后,才能继续执行,但是在这期间A会一直监控B的返回状态。

  异步:

  A无需等待B的返回结果,当B执行完成后,会通知A来调用。

  阻塞:

  A一直等待B返回结果,在这期间A不能够执行后续的操作。

  非阻塞:

  A无需等待B的返回结果,就能够继续执行后续的操作。

  根据这四个的定义我们可以发现:

  同步和异步指的是通知线程任务的一种机制:同步就是A必须等待B有结果才会通知继续执行;异步是A可以先执行,当B有了结果自动通知A。

  阻塞和非阻塞指的是线程等待结果时的状态,如果阻塞是线程就不继续执行,如果非阻塞线程还可以继续执行。

二、四种IO常见的模型

  了解了上面四种模型后,我们在开发中常常会遇到的IO模型

  同步阻塞:一个任务必须做完才能继续做其他任务。

  这个就很好理解,就是我们的单线程任务。根据上面的定义我们知道这种模型性能是很差的,但编码结构一定是最简单的。

  异步阻塞:异步操作是可以被阻塞住的,只不过它不是在处理消息时阻塞,而是在等待消息通知时被阻塞。

  这个定义是不是非常的绕口,因为这个模型是基本不会使用的。

  同步非阻塞:不必关心这件事情做完没有,就去做另一件事情,但是会一直监控这件事有没有做完。

  虽然根据定义,我们会认为同时做两件事情就会很快,其实不然这种机制效率也是很低的。因为你需要一直去监控任务的结果,就会使得程序进行线程的来回切换,导致性能下降。

  异步非阻塞:同时做两件事情

  这个模型是在网络编程和I/O编程中用的最多,效率最高,因为你不需要去时时监控事情是否已经做完。

Netty学习--第二章 BIO的模型详解的更多相关文章

  1. Linux 学习笔记之 --- epoll 事件模型详解

    epoll 主要采用对已就绪的 fd 进行轮询操作   一.epoll 触发方式 epoll支持 ET 和 LT 两种触发方式 ET(边缘触发):Nginx 就是采用 ET 触发方式,只支持 no-b ...

  2. “全栈2019”Java异常第二十二章:try-with-resources语句详解

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java异 ...

  3. [书籍翻译] 《JavaScript并发编程》 第二章 JavaScript运行模型

    本文是我翻译<JavaScript Concurrency>书籍的第二章 JavaScript运行模型,该书主要以Promises.Generator.Web workers等技术来讲解J ...

  4. oracle学习 第二章 限制性查询和数据的排序 ——03

    这里.我们接着上一小节2.6留下的问题:假设要查询的字符串中含有"_"或"%".又该如何处理呢? 開始今天的学习. 2.7  怎样使用转义(escape)操作符 ...

  5. SpringMVC强大的数据绑定(2)——第六章 注解式控制器详解

    SpringMVC强大的数据绑定(2)——第六章 注解式控制器详解 博客分类: 跟开涛学SpringMVC   6.6.2.@RequestParam绑定单个请求参数值 @RequestParam用于 ...

  6. 28、vSocket模型详解及select应用详解

    在上片文章已经讲过了TCP协议的基本结构和构成并举例,也粗略的讲过了SOCKET,但是讲解的并不完善,这里详细讲解下关于SOCKET的编程的I/O复用函数. 1.I/O复用:selec函数 在介绍so ...

  7. “全栈2019”Java第二十八章:数组详解(上篇)

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...

  8. 零拷贝详解 Java NIO学习笔记四(零拷贝详解)

    转 https://blog.csdn.net/u013096088/article/details/79122671 Java NIO学习笔记四(零拷贝详解) 2018年01月21日 20:20:5 ...

  9. css 06-CSS盒模型详解

    06-CSS盒模型详解 #盒子模型 #前言 盒子模型,英文即box model.无论是div.span.还是a都是盒子. 但是,图片.表单元素一律看作是文本,它们并不是盒子.这个很好理解,比如说,一张 ...

随机推荐

  1. 基于EasyHook实现监控explorer资源管理器文件复制、删除、剪切等操作

    一.前言 最近自己在研究一个项目,需要实现对explorer资源管理器文件操作的监控功能,网上找到一些通过C++实现Hook explorer文件操作的方法,由于本人习惯用.NET开发程序,加之C/C ...

  2. oracle中awr性能报告阅读笔记

    1.对于数据库运行的业务不太了解,那么awr性能报告中最需要关注的是Top 5 Timed Foreground Events和Time Model Statistics两个部分

  3. 测开之路一百四十七:用WTForms实现编辑功能

    接上一篇的内容 把原先的数据库模型全部给默认值,后面form赋值的时候就不用传位置参数了 把视图逻辑修改一下 # 视图层from datetime import datetimefrom flask. ...

  4. Jmeter之安装和配置

    一.Jmeter下载: 官网下载地址:http://jmeter.apache.org/download_jmeter.cgi 目前最新版本为5.0(未使用过),建议使用4.0 (存在两种格式的压缩包 ...

  5. 11 ORA-8102:Index Corruption解析

    11 ORA-8102:Index Corruption解析 [oracle@DSI ~]$ oerr ora 810208102, 00000, "index key not found, ...

  6. 正则表达式——Unicode 属性

      每一个 Unicode 字符,除了有 Code Point 与之对应外,还具体其他属性,在正则表达式中常用到三种 Unicode 属性: Unicode Property.Unicode Scri ...

  7. Java多线程学习——join方法的使用

    join在线程里面意味着“插队”,哪个线程调用join代表哪个线程插队先执行——但是插谁的队是有讲究了,不是说你可以插到队头去做第一个吃螃蟹的人,而是插到在当前运行线程的前面,比如系统目前运行线程A, ...

  8. Binary Tree Level Order Traversal(二叉树广度优先遍历或逐层遍历)

    来源:https://leetcode.com/problems/binary-tree-level-order-traversal Given a binary tree, return the l ...

  9. C语言第八周编程作业

        这个作业属于哪个课程 C语言程序设计 这个作业要求在哪 https://edu.cnblogs.com/campus/zswxy/computer-scienceclass3-2018/hom ...

  10. Servlet,HttpServletRequest 和 HttpServletResponse

    今天是周六,老子加班,还可吧, 哈哈哈哈哈哈哈哈哈哈哈哈哈 此次更新的内容是HttpServletRequest 和 HttpServletResponse 昨天复习了一部分内容,今天又把剩下的看完. ...