Netty学习--第二章 BIO的模型详解
2024-09-05 19:47:56
一、什么是阻塞、非阻塞、同步、异步
我们以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编程中用的最多,效率最高,因为你不需要去时时监控事情是否已经做完。
最新文章
- .NET 对接JAVA 使用Modulus,Exponent RSA 加密
- Css样式表【边界边框】【列表方块】
- Netty(三)TCP粘包拆包处理
- ssi项目(1)环境搭建
- python类相关
- 虚拟机Linux----Ubuntu1204----退格键方向键无法使用
- 一.JSP开发的工具下载与环境搭建
- 百度云观测优化建议解决方案:未设置max-age或expires
- sql 函数 总结
- MySQL必知必会笔记<;1>;
- quick-cocos2d-x教程8:程序框架内lib文件夹分析
- winform 实现选择的城市名单
- Web爬去的C#请求发送
- 机器学习 —— 基础整理(七)前馈神经网络的BP反向传播算法步骤整理
- XAF 框架中,自定义参数动作(Action),输入参数的控件可定义,用于选择组织及项目
- P1019 单词接龙
- 三篇文章带你极速入门php(三)之php原生实现登陆注册
- Mathematics | Mean, Variance and Standard Deviation
- SSH框架整合开发具体解释(个人笔记)
- linux命令(36):vimdiff文件对比