同步和异步,阻塞和非阻塞

同步:本线程后续代码逻辑依赖于某任务结果,就是同步(即使我提交了一个任务,返回一个future之后我执行了几行代码,然后我同步(f.get())获取,仍然是同步的)。
异步:本线程后续代码逻辑不依赖于某任务结果,可以将此任务交给其他线程或者内核执行,可以在该任务上注册监听事件,完成之后的处理也不必在提交任务的线程(本线程)中。

阻塞和非阻塞:

        阻塞:本线程执行某任务,任务完成之前线程挂起。
        非阻塞:本线程执行某任务,任务提交之后立即返回,线程可以继续执行后续代码。

首先明确阻塞的是什么,是线程,不是cpu,cpu该干活继续干别的活,只是当前阻塞的线程不能再去用来提交别的任务了。那你可能觉得阻塞又不影响cpu工作,阻塞就阻塞呗,但是线程本身也是一种资源,创建也需要消耗资源(内存等)。

        举个例子吧,如果你电脑四核,你创建一个固定四个线程的线程池去执行5个任务,假设你提交的前三个任务都很耗时(cpu密集型),第四个是磁盘I/O操作,你提交前四个任务之后,如果第四个任务是阻塞的,当他进行I/O操作时,该线程挂起,第五个任务也提交不了,因为没线程,但是第四个cpu空闲了,因为没有线程提交任务去给他执行。但如果第四个任务是非阻塞的,当它进行IO操作时,线程就可以用来提交第五个任务,空闲出来的cpu也就可以去执行第五个任务了。

这是我的理解,欢迎指正

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值