Netty学习--第二章 BIO的模型详解
一、什么是阻塞、非阻塞、同步、异步
我们以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的模型详解的更多相关文章
- Linux 学习笔记之 --- epoll 事件模型详解
epoll 主要采用对已就绪的 fd 进行轮询操作 一.epoll 触发方式 epoll支持 ET 和 LT 两种触发方式 ET(边缘触发):Nginx 就是采用 ET 触发方式,只支持 no-b ...
- “全栈2019”Java异常第二十二章:try-with-resources语句详解
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java异 ...
- [书籍翻译] 《JavaScript并发编程》 第二章 JavaScript运行模型
本文是我翻译<JavaScript Concurrency>书籍的第二章 JavaScript运行模型,该书主要以Promises.Generator.Web workers等技术来讲解J ...
- oracle学习 第二章 限制性查询和数据的排序 ——03
这里.我们接着上一小节2.6留下的问题:假设要查询的字符串中含有"_"或"%".又该如何处理呢? 開始今天的学习. 2.7 怎样使用转义(escape)操作符 ...
- SpringMVC强大的数据绑定(2)——第六章 注解式控制器详解
SpringMVC强大的数据绑定(2)——第六章 注解式控制器详解 博客分类: 跟开涛学SpringMVC 6.6.2.@RequestParam绑定单个请求参数值 @RequestParam用于 ...
- 28、vSocket模型详解及select应用详解
在上片文章已经讲过了TCP协议的基本结构和构成并举例,也粗略的讲过了SOCKET,但是讲解的并不完善,这里详细讲解下关于SOCKET的编程的I/O复用函数. 1.I/O复用:selec函数 在介绍so ...
- “全栈2019”Java第二十八章:数组详解(上篇)
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...
- 零拷贝详解 Java NIO学习笔记四(零拷贝详解)
转 https://blog.csdn.net/u013096088/article/details/79122671 Java NIO学习笔记四(零拷贝详解) 2018年01月21日 20:20:5 ...
- css 06-CSS盒模型详解
06-CSS盒模型详解 #盒子模型 #前言 盒子模型,英文即box model.无论是div.span.还是a都是盒子. 但是,图片.表单元素一律看作是文本,它们并不是盒子.这个很好理解,比如说,一张 ...
随机推荐
- LeetCode_70.爬楼梯
LeetCode-70 LeetCode_70.爬楼梯 假设你正在爬楼梯.需要 n 阶你才能到达楼顶. 每次你可以爬 1 或 2 个台阶.你有多少种不同的方法可以爬到楼顶呢? 注意:给定 n 是一个正 ...
- webpack安装低于4版本(没有配置webpack.config.js)
webpack安装低于4版本(没有配置webpack.config.js) webpack 无需配置输出参数-o 低版本 1.初始化项目 npm init -y 初始化项目 2.安装webpack@ ...
- leetcode-mid- 50. Pow(x,n)-NO
mycode time limited 例如 x=0.00001 n=2147483647 参考: class Solution(object): def myPow(self, x, n): &q ...
- c++ 指针类型转换
1.数据类型转换(static_cast) //数据类型转换printf("%d\n", static_cast<int>(10.2)); 2.指针类型转换(reint ...
- ActionList及Action使用
ActionList及Action使用 https://blog.csdn.net/adamrao/article/details/7450889 2012年04月11日 19:09:27 阅读数:1 ...
- 2018.03.29 python-pandas transform/apply 的使用
#一般化的groupby方法:apply df = pd.DataFrame({'data1':np.random.rand(5), 'data2':np.random.rand(5), 'key1' ...
- ARTS-0
ARTS的初衷 Algorithm:主要是为了编程训练和学习.每周至少做一个 leetcode 的算法题(先从Easy开始,然后再Medium,最后才Hard).进行编程训练,如果不训练你看再多的算法 ...
- xshell简单配置(文件上传和下载)
1.安装lrzsz 1.1直接安装#yum install lrzsz 1.2sudo命令安装#sudo yum install lrzsz -y检查是否安装成功.#rpm -qa |grep lrz ...
- laravel框架源码分析(一)自动加载
一.前言 使用php已有好几年,laravel的使用也是有好长时间,但是一直对于框架源码的理解不深,原因很多,归根到底还是php基础不扎实,所以源码看起来也比较吃力.最近有时间,所以开启第5.6遍的框 ...
- 使用Object.create()实现继承 用 Object.create实现类式继承
使用Object.create()实现继承:https://www.cnblogs.com/cuew1987/p/4075027.html 用 Object.create实现类式继承:https:// ...