博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
同步与异步、阻塞与非阻塞理解
阅读量:7154 次
发布时间:2019-06-29

本文共 1135 字,大约阅读时间需要 3 分钟。

为什么要理解这几个名词?

想要真正理解网络编程的原理,下面几个名词的理解是不可避免的,如果对下面几个名词不清晰,去学习网络编程中的BIO、NIO、AIO框架,会越陷越深,无法自拔。

同步、异步、阻塞、非阻塞

同步与异步:同步和异步是客户端与服务端通信的一种机制。
同步通信:就是客户端发送请求后,必须要等着接收到服务端的响应才能进行下一个请求。
异步通信:就是客户端发送请求后,不必一直等待服务端的响应,它仍然可以进行下一个请求,最终结果可能会由服务端通过回调函数返还给客户端。
 
阻塞和非阻塞:阻塞和非阻塞是客户端线程在等待服务端响应过程中的一个线程状态。如果在等待的过程中线程可以继续运行则叫做非阻塞,但是如果等待的过程中线程挂起或者休眠了就叫做阻塞。
 
场景:小明用下载器下载一部电影,分析这个过程。
 
1、同步阻塞
场景:小明(客户端),下载器(服务端),下载电影(客户端请求),下载完成(服务端响应),下载器有无完成时提醒(服务端回调函数)
小明使用下载器下载电影,一直等在电脑前面,什么事情没有做,等待电影下载完成。
同步:小明一直等待电影下载完成=客户端一直在等待服务端响应。
阻塞:等待的过程,小明啥事也没做,空等。
 
2、同步非阻塞
场景:小明(客户端),下载器(服务端),下载电影(客户端请求),下载完成(服务端响应),下载器有无完成时提醒(服务端回调函数)
小明使用下载器下载电影,跑去看电视,时不时看下下载进度,电影下载完成。
同步:就下载电影这件事,小明一直等待电影下载完成=客户端一直在等待服务端响应。
非阻塞:小明在下载电影的过程中,还去看电视了。
 
3、异步阻塞
场景:小明(客户端),下载器(服务端),下载电影(客户端请求),下载完成(服务端响应),下载器有无完成时提醒(服务端回调函数)
小明使用下载器下载电影,一直等待在电脑前面,啥事也不做,下载完成后下载器有提醒。
异步:小明下载电影1后其实可以立马下载其他电影,不用等电影1下载完。但是因为阻塞了,所以没有得到体现。
阻塞:小明还是一直等待在电脑前面。空等。
 
4、异步非阻塞
场景:小明(客户端),下载器(服务端),下载电影(客户端请求),下载完成(服务端响应),下载器有无完成时提醒(服务端回调函数)
小明使用下载器下载电影1,过了一分钟(电影1没下载完),小明又开始下载电影2,然后再去看电视,下载器下载完成提醒小明。
异步:小明用下载器下载电影1,不用等电影1完成,又下载电影2。客户端请求服务端,不用等它响应,又请求客户端。
非阻塞:小明在下载电影的过程中,还去看电视了。
 

 

转载于:https://www.cnblogs.com/chinaifae/p/10271005.html

你可能感兴趣的文章
【MySQL】MySQL5.6新特性之Multi-Range Read
查看>>
[20160719]主外键与延迟约束2.txt
查看>>
[20170623]利用传输表空间恢复部分数据.txt
查看>>
TortoiseGit安装与配置(转)
查看>>
SQL SERVER完整、差异和事务日志备份及还原(脚本和GUI实现)
查看>>
自然语言处理工具 nltk 安装使用
查看>>
深度学习:随机值不可思议的有效性
查看>>
转 mariadb集群介绍
查看>>
不重启机器修改计算机名
查看>>
ExtJs之Ext.form.field.ComboBox组合框
查看>>
iOS Programming Recipe 6: Creating a custom UIView using a Nib
查看>>
iOS开发之pch文件
查看>>
深入浅出JSON[转]
查看>>
单例模式
查看>>
对无线电商动态化方案的思考(一)
查看>>
MySQL内核月报 2014.09-TokuDB· HA方案·TokuDB热备
查看>>
Spring的IOC原理
查看>>
前端JavaScript规范
查看>>
Java内存管理
查看>>
CentOS与Broadcom 5709兼容性问题导致业务网络中断
查看>>