对于我们的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无用