同步/异步&阻塞/非阻塞

平时开发中经常会听大家说到什么同步阻塞、异步非阻塞等等名词,这里我谈下自己对这两个名词的理解,仅仅是个人观点,并不一定正确

1.阻塞/非阻塞

我认为判定阻塞还是非阻塞,取决于线程所做的操作是否需要将线程挂起等待。
举个例子,我们都知道CAS是非阻塞的,而synchronized是阻塞的。为什么呢,因为CAS能快速返回一个获取锁成功或失败结果,线程可以在获取锁失败时再去做其他事情,而synchronized在线程获取锁失败后会将线程挂起,直到锁释放后才可能被重新唤醒,这期间线程一直处于blocked的等待状态。

1.同步/非同步

我认为同步还是非同步,取决于是否是当前线程亲自执行操作。若当前线程亲自执行操作则为同步,当前线程通过创建或利用其他线程执行操作则为异步。
同样举个例子,我们都知道Nio和Aio,一个为同步非阻塞,一个为异步非阻塞。在Nio中所有的业务线程会将关注的读写事件和回调接口注册到事件中心,通过事件管理线程不停的循环检测是否有就绪的事件,如果有事件管理器就会调用回调接口,业务线程就会去进行相应的读写操作和业务逻辑。而区别于Nio,在Aio中业务线程会直接向操作系统提出一个异步IO的请求,然后将回调函数和相关信息注册到事件中心,操作系统会异步的进行相应IO读写操作并将结果写到指定内存地址,操作完成后由事件管理器调用业务线程的回调接口,业务线程直接使用内存数据。两者之前的区别在于是否为业务线程亲自进行读写操作。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

斜阳雨陌

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值