【多线程】阻塞,忙等待,睡眠,挂起的简单理解,以及各自优缺点

阻塞(Blocking)

理解:当一个线程或进程执行阻塞操作时,它会暂停执行,直到某个条件满足(例如,I/O操作完成、资源可用等)。在此期间,该线程或进程不会占用CPU资源。

优点

  • 减少CPU资源浪费,因为阻塞的线程或进程不会占用CPU时间片。
  • 简化编程模型,因为不需要处理复杂的轮询逻辑。

缺点

  • 增加了响应时间,因为线程或进程在条件满足之前无法继续执行。
  • 可能导致线程或进程调度延迟,特别是在高并发场景下。

忙等待(Busy-Waiting)

理解:忙等待是指线程或进程不断检查某个条件是否满足,如果条件未满足,则继续循环检查。这种机制下,线程或进程占用CPU资源,但不进行实际的工作。

优点

  • 可以快速响应条件变化,因为线程或进程不需要等待操作系统调度。
  • 在某些情况下,可以减少延迟,例如,当预期条件很快就会满足时。

缺点

  • 浪费CPU资源,因为线程或进程在等待期间持续占用CPU进行无效循环。
  • 增加了系统负载,可能导致其他线程或进程的调度延迟。

睡眠(Sleeping)

理解:睡眠是指线程或进程主动放弃CPU资源一段时间,让出CPU给其他线程或进程使用。睡眠时间结束后,线程或进程可以被操作系统调度执行。

优点

  • 减少CPU资源浪费,因为线程或进程在指定时间内不会占用CPU。
  • 可以用于实现简单的定时任务。

缺点

  • 增加了响应时间,因为线程或进程在睡眠结束后才能继续执行。
  • 精确控制响应时间可能比较困难,因为睡眠时间可能受到操作系统的调度策略影响。

挂起(Suspending)

理解:挂起是指操作系统暂停线程或进程的执行,直到被显式地恢复。挂起的线程或进程不会占用CPU资源,也不会被调度执行。

优点

  • 减少CPU资源浪费,因为挂起的线程或进程不会占用CPU。
  • 可以用于实现复杂的同步机制,例如,等待某个条件满足后才恢复线程或进程。

缺点

  • 增加了线程或进程的管理开销,因为操作系统需要跟踪挂起的线程或进程状态。
  • 挂起和恢复操作可能涉及上下文切换,这会带来一定的性能开销。

总结一下

  • 阻塞睡眠 通常用于等待外部事件(如I/O操作完成、定时器到期等),它们通过减少CPU资源的浪费来提高系统的整体效率。
  • 忙等待 适用于预期条件很快就会满足的情况,它避免了上下文切换的开销,但会浪费CPU资源。
  • 挂起 用于更复杂的同步场景,它允许操作系统精确控制线程或进程的执行,但管理开销较大。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值