同步和异步,阻塞和非阻塞,到底区别在哪里

这个问题由来已久,翻过很多博客,看到过各种各样的解释。

但我知道你不喜欢看大段的文字,手痒画了几张图,希望能给大家解惑。

同步和异步

同步和异步

稍微解释下。。
我认为,同步和异步的根本区别就是,目标方法是不是在当前线程上执行的。

  1. 同步:目标方法在当前线程上执行,会占用当前线程的执行时间
  2. 异步,是把目标方法交给另一个线程去执行。最简单的办法就是new一个Thread去做这个事情了,或者不管什么方式,只要通知到另外一个线程去做某件事,这就是异步了。

阻塞和非阻塞

这和同步异步完全不是一回事,描述的不是一个阶段的东西。这两个词经常用来描述结果获取。

这里写图片描述

  1. 阻塞:当前线程调用某个方法想做某件事,但是如果条件暂不满足,可能会导致当前线程进入非Running状态(比如Wait/Sleep/Park),直到发生了另外一件事情(比如超时,或者接到另一个线程的通知,或者获得锁),才能终止这种非运行状态,完成想做的事情,这就是阻塞。
  2. 非阻塞:当前线程调用某个方法想做某件事,但是如果条件暂不满足,方法会立即退出并”Say NO!”,表示无法完成,这就是非阻塞。有时候,当前线程会持续不断地调用这个方法,直到最终成功。

其他

最近看到一篇博客,讲的是计算机内核的各种I/O复用机制,很不错,推荐给大家:
再谈select, iocp, epoll,kqueue及各种I/O复用机制

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值