对于我们的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方法来判断任务是否完成,而不是直接阻塞等待结果,是为了提高线程的利用率和系统的性能。这是因为在多线程编程中,有效地管理和协调线程的操作至关重要。本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 1无用
悬赏问题
- ¥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时遇到的编译问题