同步阻塞与非阻塞,异步阻塞与非阻塞

澄清一些概念的东西,对大家理解一些框架很有好处:

阻塞与非阻塞:指的是线程的状态

同步与异步: 指的是服务的状态

非阻塞式:当请求线程进入阻塞状态时,当前线程会被挂起(不占用任何资源),当前的计算资源会去做别的事情,当被挂起的线程收到响应时才会被继续执行(事件通知,nio,多路复用),压榨CPU用更少的资源做更多的事情,但并不会提升性能

阻塞式: 当请求线程进入阻塞状态时,线程不会被挂起,而是继续等待着内存中,直到满足其需要的资源继续执行,线程在被阻塞期间不会占用CPU资源, 但是会占用内存等资源

这里面要区分 挂起 和阻塞,它们是线程的两种状态,

java 中 wait() 方法是挂起,需要被主动唤醒,释放资源;

sleep()方法是阻塞,满足条件自动执行,不释放资源

挂起与阻塞的区别:

共同点: 
           1. 都暂停执行 
            2. 都释放CPU,即两个过程都会涉及上下文切换

不同点: 
           1. 对系统资源占用不同:虽然都释放了CPU,但阻塞的进程仍处于内存中,而挂起的进程通过“对换”技术被换出到外存(磁盘)中。 
           2. 发生时机不同:阻塞一般在进程等待资源(IO资源、信号量等)时发生;而挂起是由于用户和系统的需要,例如,终端用户需要暂停程序研究其执行情况或对其进行修改、OS为了提高内存利用率需要将暂时不能运行的进程(处于就绪或阻塞队列的进程)调出到磁盘 
           3. 恢复时机不同:阻塞要在等待的资源得到满足(例如获得了锁)后,才会进入就绪状态,等待被调度而执行;被挂起的进程由将其挂起的对象(如用户、系统)在时机符合时(调试结束、被调度进程选中需要重新执行)将其主动激活

这篇文章介绍的比较详细:

阻塞与挂起的区别-CSDN博客

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值