为什么说Future是阻塞的
时间: 2023-07-15 20:09:54 浏览: 54
Future并不总是阻塞的,但是在某些情况下会出现阻塞的情况。
Future是一种异步编程的方式,它允许我们发起一个操作并立即返回一个Future对象,该对象表示该操作的结果。当我们需要该结果时,我们可以使用Future对象的get()方法来获取结果。如果Future对象表示的操作已经完成,那么get()方法会立即返回结果。但如果操作还没有完成,get()方法就会阻塞,直到操作完成并返回结果。
因此,如果我们使用Future来执行一个耗时的操作,而在获取结果之前我们没有做任何异步处理,那么就会出现阻塞的情况。为了避免这种情况,我们可以使用线程池、协程等技术来实现异步处理,从而避免阻塞。
相关问题
什么是future对象
Future对象是Python中的一种异步编程模型,它表示一个尚未完成的操作,并允许在操作完成后获取结果。Future对象可以作为协程(coroutine)和异步函数(async function)的返回值,用于实现异步操作的等待和结果获取。在 asyncio 库中,Future对象是一个可等待对象(awaitable),可以使用 await 关键字来等待其结果。
Future对象的特点是非阻塞(non-blocking),即它在等待操作完成时不会阻塞当前线程或进程,而是允许其他操作继续执行。当操作完成后,Future对象的状态将被设置为“完成”(done),并存储操作的结果。可以使用add_done_callback()方法来注册回调函数,在操作完成后自动执行。
什么是callable和future
`callable` 是一个 C++ 模板类,它可以将任意可调用对象(比如函数指针、函数对象、Lambda 表达式等)转化为一个函数对象(即重载了 `operator()` 的类),从而可以像调用函数一样调用这个可调用对象。使用 `callable` 可以方便地实现通用的函数对象,比如实现线程池等。
`future` 是 C++11 中引入的一个类模板,用于异步计算的结果传递。当一个异步任务完成后,可以通过 `future` 对象来获取其结果,或者等待其完成。`future` 对象可以通过异步任务的返回值类型来创建,当异步任务完成时,它会存储返回值,然后可以通过 `future` 对象的 `get()` 方法来获取结果。如果异步任务还没有完成,那么 `get()` 方法会阻塞调用线程,直到异步任务完成。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)