我可以将类星体中的 SettableFuture 假设为光纤吗?
Can I assume SettableFuture in quasar as a Fiber?
我可以假设 SettableFuture
在异步代码中充当 Fiber
吗(应该假设为 ForkJoinTask
)?
A Quasar SettableFuture can block fibers in addition to threads.
Future 不代表 运行 代码,而是一个可以立即可用或将来可以同时可用(因此得名)的值 w.r.t。持有对它的引用的线程。此外,它可以被等待,同时等待的线程将阻塞:这意味着它还充当线程同步机制。
"settable" 未来的价值不仅可以由实现 class 在内部产生,还可以从外部线程设置,类似于 promise.
Quasar 的 SettableFutures 有额外的能力允许所有类型的 Quasar strands(即目前,常规 Java 线程以及 Quasar 纤维)在它们等待时阻塞该值尚不可用。
这意味着您可以在任何链(线或纤维)中创建一个 SettableFuture
,引用它,例如在将设置其值(执行时)的异步回调的代码中,但 return 它会立即阻塞更多股线(线程或纤程),同时等待其值。因此,它是将异步 API 转换为阻塞(通常是高效的光纤阻塞)API 的绝佳工具。 blog post.
的 "Future" 小节中也描述了这种模式
我可以假设 SettableFuture
在异步代码中充当 Fiber
吗(应该假设为 ForkJoinTask
)?
A Quasar SettableFuture can block fibers in addition to threads.
Future 不代表 运行 代码,而是一个可以立即可用或将来可以同时可用(因此得名)的值 w.r.t。持有对它的引用的线程。此外,它可以被等待,同时等待的线程将阻塞:这意味着它还充当线程同步机制。
"settable" 未来的价值不仅可以由实现 class 在内部产生,还可以从外部线程设置,类似于 promise.
Quasar 的 SettableFutures 有额外的能力允许所有类型的 Quasar strands(即目前,常规 Java 线程以及 Quasar 纤维)在它们等待时阻塞该值尚不可用。
这意味着您可以在任何链(线或纤维)中创建一个 SettableFuture
,引用它,例如在将设置其值(执行时)的异步回调的代码中,但 return 它会立即阻塞更多股线(线程或纤程),同时等待其值。因此,它是将异步 API 转换为阻塞(通常是高效的光纤阻塞)API 的绝佳工具。 blog post.