【vert.x准备篇1】同步和异步,阻塞和非阻塞概念澄清

知乎专栏: 关于Vert.x你需要知道的一切

为了能更好的理解vert.x的线程模型,我们必须要先明确几个概念:同步(Synchronous)和异步(Asynchronous),阻塞(Blocking)和非阻塞(Non-Blocking)。关于这几个名词的解释网络上也是众多纷纭,每个人说法都不太一样,但说的又似乎很有道理。其实造成这种情况的最主要原因是这四个概念并不是完全隔离、互斥的,而是相互之间有重叠。例如,当提到异步时那调用一定是非阻塞的,提到同步时则一定会有阻塞调用,此谓之重叠;然而如果我们在谈异步,那在调用方的角度来看是一定不存在阻塞的情况发生的,此谓之互斥。下面我们详细聊聊对于这几个名词大家应该如何理解。

我们以在单线程环境下调用功能为读取文件内容的方法readFile(filename)为例来模拟一下都会发生什么:

  • 阻塞

调用此方法后主线程进入阻塞状态,期间不能执行任务操作,一直到readFile()返回才能继续执行后面的代码。

  • 非阻塞

调用此方法后,readFile()立刻返回,主线程可以继续执行后面的代码而不需要等待磁盘I/O操作完成。但这里会产生一个问题,主线程怎么才能知道readFile()是否完成?是会有人通知这一事件,还是主线程主动去轮询呢?

  • 同步

其实同步/异步是一个比阻塞/非阻塞更加广泛的概念。我们在说阻塞时,一定是在描述某种I/O操作,比如文件读写

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值