首页 > 编程语言 >【编程底层思考】线程阻塞时一定会释放cpu吗

【编程底层思考】线程阻塞时一定会释放cpu吗

时间:2024-09-01 18:22:22浏览次数:14  
标签:释放 编程 阻塞 CPU 线程 等待 cpu 资源

线程阻塞时是否释放CPU取决于阻塞的原因和操作系统的行为。以下是一些具体情况:

1. 阻塞等待资源:当线程因为等待某个资源(如锁、信号量、条件变量等)而阻塞时,它通常会释放CPU,以便其他线程可以运行。在这种情况下,阻塞的线程不会占用CPU资源,直到它等待的资源变得可用。

2. 阻塞等待I/O操作:当线程因为等待I/O操作(如读取文件、网络通信等)而阻塞时,它也会释放CPU。操作系统会将线程挂起,直到I/O操作完成。

3. 阻塞等待用户输入:如果线程在等待用户输入(如从控制台读取数据)时阻塞,它同样会释放CPU。

4. 主动阻塞:当线程调用Thread.sleep()Object.wait()等方法主动阻塞时,它会释放CPU,直到指定的时间过去或被唤醒。

5. 阻塞在就绪队列中:如果线程因为某些条件不满足而阻塞在就绪队列中(例如,等待某个条件变量的信号),它也会释放CPU。

然而,也有一些特殊情况:

  • 自旋锁:在某些情况下,线程可能会在等待锁时“自旋”,即不断检查锁是否可用,而不是立即释放CPU。这种行为在等待时间非常短的情况下可能是有效的,因为它避免了线程上下文切换的开销。但是,如果等待时间较长,自旋锁可能会导致CPU资源的浪费。

  • 忙等待:如果线程在等待某个条件时不断检查该条件是否满足(忙等待),那么它不会释放CPU,直到条件满足。这种行为通常不推荐,因为它会占用宝贵的CPU资源。

总的来说,大多数情况下,当线程阻塞时,它会释放CPU,以便其他线程可以运行。但是,具体行为可能会因操作系统、编程语言和具体的同步机制而有所不同。

标签:释放,编程,阻塞,CPU,线程,等待,cpu,资源
From: https://blog.csdn.net/u010425839/article/details/141786412

相关文章

  • python threading 线程原理实验
    原理进程之间,编程语言可以不同,内存不共享。需要用socket/IRC/RPC等技术实现进程间通信线程之间,编程语言必须相同,内存共享。类变量self.xxx共享,分叉target的函数内变量private不共享。代码#!/usr/bin/env-Scondarun--live-stream-nbasepythonimportthreadingasthi......
  • 20240908_030339 编程剪辑 读取音频对像获得音频时长
    需求有一个目录里存放了多个音频文件我们要获取这些音频文件的相关信息编写一个方法接收音频文件的目录返回音频信息列表示例......
  • Java 入门指南:Java 并发编程 —— AQS、AQLS、AOS 锁与同步器的框架
    AQSAQS是AbstractQueuedSynchronizer的缩写,即抽象队列同步器,是Java.util.concurrent中的一个基础工具类,用于实现同步器(Synchronizer)的开发。AQS提供了一种实现锁和同步器的框架,使用AQS能简单且高效地构造出应用广泛的同步器,使得开发者能够更方便地编写线程安全的......
  • 正点原子Linux C应用编程:移植tslib并使其适配7寸LCD1024*600的GT911触摸驱动
    正点原子LinuxC应用编程:移植tslib并使其适配7寸LCD1024*600的GT911触摸驱动作者在学习【正点原子】I.MX6U嵌入式LinuxC应用编程指南V1.4时,发现移植tslib后,触摸事件触发不正常。使用的硬件版本:正点原子I.MX6UALPHAV2.4版本底板,LCD:正点原子7寸1024*600,型号ATK-MD0700R-102460......
  • 正点原子Linux Framebuffer编程:解决示例程序在开发板上LCD显示错位和颜色异常
    正点原子LinuxFramebuffer编程:解决示例程序在开发板上运行7寸LCD显示错位和颜色异常作者在学习【正点原子】I.MX6U嵌入式LinuxC应用编程指南V1.4时,发现其配套的程序在开发板上运行不正常。使用的硬件版本:正点原子I.MX6UALPHAV2.4版本底板,LCD:正点原子7寸1024*600,型号ATK-MD0......
  • 20240901_161659 编程剪辑项目列表
    资料20240901_161503编程剪辑相关列表_鲸鱼编程pyhui的技术博客_51CTO博客https://blog.51cto.com/u_13137233/11889402项目20240901_151114python项目获取需要的视频_鲸鱼编程pyhui的技术博客_51CTO博客https://blog.51cto.com/u_13137233/11889375......
  • CPU核心不同,对服务器性能有哪些影响?
    CPU核心数量对服务器性能有显著影响,尤其在处理多任务和并发工作负载时。以下是不同核心数量对服务器性能的具体影响:1.并行处理能力1)多任务处理:多核心CPU可以同时处理多个任务,因为每个核心都可以独立执行线程。这意味着服务器可以更高效地处理并发请求,减少响应时间。对于......
  • 【python学习】第一次学习编程的时候,我怀疑过自己是不是太笨了,还好后来发现
    你是如何克服编程学习中的挫折感的?面对今天的这个主题,我深有感触,我必须分享一个关于我自己的真实的故事,希望它能够给每一个初学者带来一些鼓励和启发。相信自己,其实,编程没什么困难的。第一次学习python的经历在我第一次学习python的时候,上的是python的基础课程,当时教室里......
  • Java中的i++操作为什么不是线程安全的?
     目录1.理解i++操作2.竞态条件的示例3.如何解决i++的线程安全问题?需求场景:计数器的并发访问与统计背景:需求:代码示例与问题分析:预期结果:实际结果:解决方案一:使用synchronized关键字解决方案二:使用AtomicInteger解决方案三:使用ReentrantLock需求模拟与扩展......
  • 【STM32 Blue Pill编程】-UART数据发送与接收(DMA模式)
    UART数据发送与接收(DMA模式)文章目录UART数据发送与接收(DMA模式)1、DMA介绍2、STM32的UART端口3、硬件准备及接线4、UART配置5、代码实现在本文中,我们将展示如何使用STM32BluePillUART通过直接内存访问(DMA)来发送和接收数据。这一过程而无需涉及CPU。......