阻塞 VS 挂起

阻塞与挂起都是进程的状态,但他们有一些相似之处,也有一些区别,下面先对他们进行概述,再进行比较

阻塞:正在执行的进程由于发生某时间(如I/O请求、申请缓冲区失败等)暂时无法继续执行。此时引起进程调度,OS把处理机分配给另一个就绪进程,而让受阻进程处于暂停状态,一般将这种状态称为阻塞状态。

挂起:由于系统和用户的需要引入了挂起的操作,进程被挂起意味着该进程处于静止状态。如果进程正在执行,它将暂停执行,若原本处于就绪状态,则该进程此时暂不接受调度。

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

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

挂起和阻塞区别:
(1)挂起是一种主动行为,因此恢复也应该要主动完成。而阻塞是一种被动行为,是在等待事件或者资源任务的表现,你不知道它什么时候被阻塞,也不清楚它什么时候会恢复阻塞。
(2)阻塞(pend)就是任务释放CPU,其他任务可以运行,一般在等待某种资源或者信号量的时候出现。挂起(suspend)不释放CPU,如果任务优先级高,就永远轮不到其他任务运行。一般挂起用于程序调试中的条件中断,当出现某个条件的情况下挂起,然后进行单步调试。

sleep()和wait()函数的区别:
(1)两者比较的共同之处是:两个方法都是使程序等待多少毫秒。
(2)最主要区别是:sleep()方法没有释放锁。而wait()方法释放了锁,使得其他线程可以使用同步控制块或者方法。
(3)sleep()指线程被调用时,占着CPU不工作,形象的说明为“占着CPU”睡觉。
sleep(2000)表示:占用CPU,程序休眠2秒。
wait(2000)表示:不占用CPU,程序等待2秒。

挂起和阻塞区别以及sleep和wait的区别相关推荐

  1. 挂起和阻塞区别?sleep()和wait()的区别?

    挂起和阻塞区别: (1)挂起是一种主动行为,因此恢复也应该要主动完成.而阻塞是一种被动行为,是在等待事件或者资源任务的表现,你不知道它什么时候被阻塞,也不清楚它什么时候会恢复阻塞. (2)阻塞(pen ...

  2. java线程的睡眠、挂起、阻塞

    线程的状态与状态间的转化 新建状态:单独的创建一个线程,参考我之前博客:java多线程的三种创建方式与多线程的应用 新建 = > 就绪:处于新建状态的进程thread调用它的start()放方法 ...

  3. 详细解说Windows 8.1与Windows 8的区别(Win8.1与Win8区别)

    详细解说Windows 8.1与Windows 8的区别(Win8.1与Win8区别) 详细解说Windows 8.1与Windows 8的区别(Win8.1与Win8区别) 本文转自"吾乐 ...

  4. C++中结构体与类的区别(struct与class的区别)

    C++中的struct对C中的struct进行了扩充,它已经不再只是一个包含不同数据类型的数据结构了,它已经获取了太多的功能. struct能包含成员函数吗? 能! struct能继承吗? 能!! s ...

  5. java web 中有效解决中文乱码问题-pageEncoding与charset区别, response和request的setCharacterEncoding 区别

    java web 中有效解决中文乱码问题-pageEncoding与charset区别, response和request的setCharacterEncoding 区别 参考文章: (1)java ...

  6. adaboost和GBDT的区别以及xgboost和GBDT的区别

    adaboost和GBDT的区别以及xgboost和GBDT的区别 AdaBoost:提高那些被前一轮弱分类器错误分类样本的权值,而降低那些被正确分类样本的权值.这样一来,那些没有得到正确分类的数据, ...

  7. 问题小结(二)——maven的核心功能、面向对象编程和面向接口编程的区别、抽象类和接口的区别等

    文章目录 1. Java创建对象有哪四种方式? 2. 什么是maven?maven的核心功能有哪些? 3. 什么是MVC?说说分层的好处. 4. Spring的两大核心技术是什么? 5. 什么是IOC ...

  8. [html] title与h1的区别、b与strong的区别、i与em的区别?

    [html] title与h1的区别.b与strong的区别.i与em的区别? title 是 网页标题标签 h1 是文本标签 默认与word的h1相似为最大的标题显示 b 为文本加粗标签 与word ...

  9. JavaScript中Element与Node的区别,children与childNodes的区别

    关于Element跟Node的区别,cilldren跟childNodes的区别很多朋友弄不清楚,本文试图让大家明白这几个概念之间的区别. Node(节点)是DOM层次结构中的任何类型的对象的通用名称 ...

最新文章

  1. 如何进行无线网络中继设置
  2. 2014年-如何编写游戏辅助工具
  3. 分布式系统之消息队列
  4. STM32F1笔记(五)外部中断EXTI
  5. c++设置一个二维字符组初值_6.8 C++字符数组
  6. 如何提高 Rust 程序的性能?
  7. 微信messageutil.java_java微信公众平台开发回复文本消息
  8. 借助 Clay 编写 不可思议 的 c# 代码
  9. FFMpeg的avcodec_send_packet/avcodec_receive_frame是异步解码
  10. win10系统steam登陆计算机授权,Steam怎样取消电脑授权 设置里面有
  11. 服务器主板电池的电压不稳定怎么办,轻松解决CMOS掉电烦恼这绝招
  12. LeetCode:合并两个有序数组
  13. Windows创建用户定义的服务(srvany.exe和instsrv.exe )
  14. python就业方向
  15. 全网最详细的Yolov3训练Caltech Pedestrain数据集并绘制fppi miss rate图
  16. [Luogu P2597] [BZOJ 2815] [ZJOI2012]灾难
  17. Android 10 正式版或将 9月3日 发布!
  18. 视频批量截取方法,怎样同时对多个视频的一部分进行截取?
  19. 小厂B端产品啥都干——B端表格设计入门指南(上)
  20. SQL语句优化(雷人代码)

热门文章

  1. RT-Thread逐飞-智能车培训之RT-Thread在全向行进组中的应用
  2. 电路纹身-疼痛的快乐
  3. 第十五届,我们一起加油吧
  4. 已解决Cause: java.sql.SQLException: Incorrect string value: ‘\\xF0\\x9F\\x8C\\xB8 \\xE5...‘报错
  5. c语言排班系统设计报告,C语言课程设计关于排班系统的一些问题
  6. 如何去除table的边框_如何擦玻璃,这些擦玻璃知识很实用
  7. java 进程消失_Java进程诡异消失问题
  8. python3 的乐趣进度条
  9. python 导入包的路径_关于Python包导入的知识点你知道吗?
  10. 西南交通大学计算机专硕调剂,2019年西南交通大学接收调剂信息