我不6,但是很想变6 2023-12-19 20:44 采纳率: 33.3%
浏览 6
已结题

循环判断为什么优先于阻塞等待

对于我们的future来说 ,两个方法 isDone 和我们的get ,我们为什么优先使用while配合isDone判断是不是执行完成,而不采用阻塞的方式直接等待结果()其实就耗时来说阻塞时间更少),但是我们为什么选择循环判断来取值,这和cpu的执行有关吗?希望得到相关的知识补充,有没有可以查看的文档,还请各位指点迷津

  • 写回答

1条回答 默认 最新

  • 之乎者也· 2023-12-19 21:39
    关注

    在多线程编程中,使用while循环配合isDone方法来判断任务是否完成,而不是直接阻塞等待结果,通常是为了避免“忙等待”(busy-waiting)。

    忙等待问题: 如果我们采用阻塞等待的方式,当任务还没有完成时,线程会一直处于等待状态,消耗大量的CPU资源。这种做法效率很低,因为线程在等待期间并没有做任何有用的工作,只是白白地占用了CPU的时间。
    CPU密集型操作: 循环检查isDone方法通常被称为"轮询"(polling)。这种方法会导致CPU占用率较高,特别是在高负载的情况下。在高负载的情况下,大量的线程都在进行轮询操作,这会消耗大量的CPU资源,导致性能下降。
    使用条件变量或信号量: 为了解决忙等待问题,通常会使用条件变量(Condition Variables)或信号量(Semaphores)等机制来协调线程之间的操作。这些机制可以有效地避免线程长时间等待,只在必要时进行短暂的等待,大大提高了效率。
    避免阻塞: 尽管阻塞的等待时间可能更少,但这种做法会阻塞线程,导致线程无法执行其他任务。而轮询则可以在任务未完成时让线程执行其他任务,提高了线程的利用率。
    相关文档和资源: 可以查阅关于多线程编程、条件变量、信号量等相关的计算机科学和操作系统文献。也可以查看Java、Python等编程语言的官方文档,了解如何在编程实践中使用这些机制。
    总的来说,选择使用while循环配合isDone方法来判断任务是否完成,而不是直接阻塞等待结果,是为了提高线程的利用率和系统的性能。这是因为在多线程编程中,有效地管理和协调线程的操作至关重要。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 12月28日
  • 已采纳回答 12月20日
  • 创建了问题 12月19日

悬赏问题

  • ¥15 基于卷积神经网络的声纹识别
  • ¥15 Python中的request,如何使用ssr节点,通过代理requests网页。本人在泰国,需要用大陆ip才能玩网页游戏,合法合规。
  • ¥100 为什么这个恒流源电路不能恒流?
  • ¥15 有偿求跨组件数据流路径图
  • ¥15 写一个方法checkPerson,入参实体类Person,出参布尔值
  • ¥15 我想咨询一下路面纹理三维点云数据处理的一些问题,上传的坐标文件里是怎么对无序点进行编号的,以及xy坐标在处理的时候是进行整体模型分片处理的吗
  • ¥15 CSAPPattacklab
  • ¥15 一直显示正在等待HID—ISP
  • ¥15 Python turtle 画图
  • ¥15 stm32开发clion时遇到的编译问题