java 同步/异步IO和阻塞/非阻塞IO 关系和概念解析

本文详细解析了Java中的同步/异步和阻塞/非阻塞I/O的概念及关系。同步通常与阻塞相伴,异步则与非阻塞关联,但二者并不互斥。同步关注是否多任务并发,异步关注事件的并发执行。阻塞和非阻塞关注于I/O操作过程中线程的状态,阻塞在等待数据就绪,非阻塞则不等待并返回状态。文章还介绍了各种I/O模型,如阻塞I/O、非阻塞I/O、多路复用I/O、信号驱动I/O和异步非阻塞I/O,并阐述了它们在不同场景下的适用性。
摘要由CSDN通过智能技术生成

I/O的模型

首先要声明的一点一定要把同步/异步 阻塞/非阻塞 以及I/O这三者的概念区别开来,同步大部分是阻塞
的,异步大部分是非阻塞的,但是它们之间并没有必然的因果关系

同步与异步

两者产生需要有个前提——是否有多个任务或事件发生,只有满足了这一前提,才有了同步和异步的概念

同步:如果有多个任务或者事件要发生,这些任务或者事件必须逐个地进行,一个事件或者任务
的执行会导致整个流程的暂时等待,这些事件没有办法并发地执行

异步:如果有多个任务或者事件发生,这些事件可以并发地执行,一个事件或者任务的执行不会
导致整个流程的暂时等待

再扩展一点,所谓同步,就是在发出一个功能调用时,在没有得到结果之前,该调用就不返回。按照这个定义,
其实绝大多数函数都是同步调用。但是一般而言,我们在说同步、异步的时候,特指那些需要其他部件协作或
者需要一定时间完成的任务

举个例子,小明他妈(调用方)派小明(被调用方)去车站迎接客人,小明一直在车站等到客人到达,把客人
带回家,交给他妈,这就是同步调用。
小明嫌在车站等着无聊,改为每隔五分钟就出去看一次,立即回来告诉他妈客人到没到,这就是异步调用

阻塞和非阻塞

这两个概念的前提条件是某个事件或者任务在执行

阻塞:当某个事件或者任务在执行过程中,它发出一个请求操作,但是由于该请求操作需要的条件
不满足,那么就会一直在那等待,直至条件满足

非阻塞:当某个事件或者任务在执行过程中,它发出一个请求操作,如果该请求操作需要的条件不
满足,会立即返回一个标志信息告知条件不满足,不会一直在那等待

因此同步/异步和阻塞/非阻塞没有必联的关系,至于为什么有时候会感觉两者有联系呢?是因为java中为
了使

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值