查看“同步与异步、阻塞与非阻塞”的源代码
←
同步与异步、阻塞与非阻塞
跳到导航
跳到搜索
因为以下原因,您没有权限编辑本页:
您所请求的操作仅限于该用户组的用户使用:
用户
您可以查看和复制此页面的源代码。
在 IO 体系中,经常能接触到同步阻塞、异步非阻塞等概念,往往使人疑惑,在多线程环境下,多线程不就是非阻塞的,单线程就是阻塞的吗? 多线程不就是异步,单线程不就是同步吗? 这种普遍的疑惑,事实上是由于概念的不清晰造成的。 多线程、单线程、同步、异步、阻塞、非阻塞,都是独立的概念,只是在多数应用场景下,它们看上去一致,所以造成了概念的混淆。 === 在多线程语境下的概念 === 在多线程语境下,用于描述任务的线程访问执行机制,同步和异步关注的是任务是否可以同时被调用,阻塞和非阻塞则关注的是线程的状态。 # 同步:指代码的同步执行(Synchronous Invoke),一个执行块同一时间只有一个线程可以访问; # 异步:指代码的异步执行(Asynchronous Invoke),多个执行块可以同时被多个线程访问; # 阻塞:线程阻塞状态(Thread Block),表示线程挂起; # 非阻塞:线程不处于阻塞状态,表示线程没有挂起; === 在 IO 语境下的概念 === 在 IO 语境下,用于描述 IO 操作,同步和异步关注的是消息发起和接收的机制,阻塞和非阻塞则是表达发起者等待结果时的状态。 # 同步:是指发起一个 IO 操作时,在没有得到结果之前,该操作不返回结果,只有调用结束后,才能获取返回值并继续执行后续的操作。 # 异步:是指发起一个 IO 操作后,不会得到返回,结果由发起者自己轮询,或者 IO 操作的执行者发起回调。 # 阻塞:是指发起者在发起 IO 操作后,不能再处理其他业务,只能等待 IO 操作结束。 # 非阻塞:是指发起者不会等待 IO 操作完成。 === 并发与并行的区别 === # 并发(Concurrency):指在同一时刻只能有一条指令执行,但多个进程指令被快速地轮换执行,使得在宏观上具有多个进程同时执行的效果,但在微观上并不是同时执行的,只是把时间分成若干段,使多个进程快速交替地执行。 # 并行(Parallel):指在同一时刻,有多条指令在多个处理器上同时执行。所以无论从微观还是从宏观来看,二者都是一起执行的。
返回至
同步与异步、阻塞与非阻塞
。
导航菜单
个人工具
登录
名字空间
页面
讨论
变种
视图
阅读
查看源代码
查看历史
更多
搜索
导航
首页
Spring Boot 2 零基础入门
Spring Cloud
Spring Boot
设计模式之禅
VUE
Vuex
Maven
算法
技能树
Wireshark
IntelliJ IDEA
ElasticSearch
VirtualBox
软考
正则表达式
程序员精讲
软件设计师精讲
初级程序员 历年真题
C
SQL
Java
FFmpeg
Redis
Kafka
MySQL
Spring
Docker
JMeter
Apache
Linux
Windows
Git
ZooKeeper
设计模式
Python
MyBatis
软件
数学
PHP
IntelliJ IDEA
CS基础知识
网络
项目
未分类
MediaWiki
镜像
问题
健身
国债
英语
烹饪
常见术语
MediaWiki帮助
工具
链入页面
相关更改
特殊页面
页面信息