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都是盒子. 但是,图片.表单元素一律看作是文本,它们并不是盒子.这个很好理解,比如说,一张 ...
随机推荐
- Git-Runoob:Git 工作区、暂存区和版本库
ylbtech-Git-Runoob:Git 工作区.暂存区和版本库 1.返回顶部 1. Git 工作区.暂存区和版本库 基本概念 我们先来理解下Git 工作区.暂存区和版本库概念 工作区:就是你在电 ...
- Selenium IDE安装及环境搭建教程
摘自https://blog.csdn.net/ywyxb/article/details/59103683 Selenium IDE环境部署- Firefox浏览器Firefox-ESR版本下载(推 ...
- jpa多表leftjoin 查询,自定义返回结果
sql代码 自定义返回结果 package com.cdp.ecosaas.coredb.uua.sync.vo; import java.io.Serializable; public class ...
- python-接口开发flask模块(三)开发登陆接口
#写一个login的接口,实现的功能是输入用户名和密码,如果数据库中有该用户,那么就去redis中插入 登陆产生的sign值插入redis中有效时间600s import flask import t ...
- nginx访问控制用户认证两种方式
一.用户认证1.首先需要用http来生成密码文件即安装apache :yum install -y httpd 生成密码文件:htpasswd -c /usr/local/nginx/conf/htp ...
- webpack bundle中parentJsonpFunction的作用
parentJsonpFunction作用:使异步加载的模块在多个不同的bundle内同步. 假设有多入口文件 bundle1.js: bundl2.js: 在webpack打包后 加载流程: 1.b ...
- 【Bean】标签常用属性
[Bean]标签常用属性 Id 说明:起名称,id属性值名称任意,不能包含特殊符号,根据id得到配置对象. Class 说明:创建对象所在类的全路径. Name 说明:功能和id是一样的,id属性值不 ...
- HttpClient设置忽略SSL,实现HTTPS访问, 解决Certificates does not conform to algorithm constraints
话不多说,直接上代码. 测试API: https://api.k780.com/?app=life.time&appkey=10003&sign=b59bc3ef6191eb9f7 ...
- Tensorflow Learning1 模型的保存和恢复
CKPT->pb Demo 解析 tensor name 和 node name 的区别 Pb 的恢复 CKPT->pb tensorflow的模型保存有两种形式: 1. ckpt:可以恢 ...
- Web安全测试中常见逻辑漏洞解析(实战篇)
Web安全测试中常见逻辑漏洞解析(实战篇) 简要: 越权漏洞是比较常见的漏洞类型,越权漏洞可以理解为,一个正常的用户A通常只能够对自己的一些信息进行增删改查,但是由于程序员的一时疏忽,对信息进行增删改 ...