修改部分描述,添加必要的标点符号,补充代码超链接 (#804)

This commit is contained in:
Jck
2021-10-25 23:34:42 +08:00
committed by GitHub
parent d5578df00a
commit 39dbdb7094
100 changed files with 433 additions and 414 deletions

View File

@@ -1,10 +1,10 @@
# 14.9 实现 Futures 模式
所谓Futures就是指有时候在你使用某一个值之前需要先对其进行计算。这种情况下你就可以在另一个处理器上进行该值的计算到使用时该值就已经计算完毕了。
所谓 Futures 就是指:有时候在你使用某一个值之前需要先对其进行计算。这种情况下,你就可以在另一个处理器上进行该值的计算,到使用时,该值就已经计算完毕了。
Futures模式通过闭包和通道可以很容易实现类似于生成器不同地方在于Futures需要返回一个值。
Futures 模式通过闭包和通道可以很容易实现,类似于生成器,不同地方在于 Futures 需要返回一个值。
参考条目文献给出了一个很精彩的例子:假设我们有一个矩阵类型,我们需要计算两个矩阵A和B乘积的逆,首先我们通过函数`Inverse(M)`分别对其进行求逆运算,再将结果相乘。如下函数`InverseProduct()`实现了如上过程:
参考条目文献给出了一个很精彩的例子:假设我们有一个矩阵类型,我们需要计算两个矩阵 A 和 B 乘积的逆,首先我们通过函数 `Inverse(M)` 分别对其进行求逆运算,再将结果相乘。如下函数 `InverseProduct()` 实现了如上过程:
```go
func InverseProduct(a Matrix, b Matrix) {
@@ -14,7 +14,7 @@ func InverseProduct(a Matrix, b Matrix) {
}
```
在这个例子中a和b的求逆矩阵需要先被计算。那么为什么在计算b的逆矩阵时,需要等待a的逆计算完成呢?显然不必要,这两个求逆运算其实可以并行执行的。换句话说,调用`Product`函数只需要等到`a_inv``b_inv`的计算完成。如下代码实现了并行计算方式:
在这个例子中a 和 b 的求逆矩阵需要先被计算。那么为什么在计算 b 的逆矩阵时,需要等待 a 的逆计算完成呢?显然不必要,这两个求逆运算其实可以并行执行的。换句话说,调用 `Product` 函数只需要等到 `a_inv``b_inv` 的计算完成。如下代码实现了并行计算方式:
```go
func InverseProduct(a Matrix, b Matrix) {
@@ -26,7 +26,7 @@ func InverseProduct(a Matrix, b Matrix) {
}
```
`InverseFuture`函数以`goroutine`的形式起了一个闭包该闭包会将矩阵求逆结果放入到future通道中
`InverseFuture` 函数以 `goroutine` 的形式起了一个闭包,该闭包会将矩阵求逆结果放入到 future 通道中:
```go
func InverseFuture(a Matrix) chan Matrix {
@@ -38,7 +38,7 @@ func InverseFuture(a Matrix) chan Matrix {
}
```
当开发一个计算密集型库时使用Futures模式设计API接口是很有意义的。在你的包使用Futures模式且能保持友好的API接口。此外Futures可以通过一个异步的API暴露出来。这样你可以以最小的成本将包中的并行计算移到用户代码中。参见参考文件18[http://www.golangpatterns.info/concurrency/futures](http://www.golangpatterns.info/concurrency/futures)
当开发一个计算密集型库时,使用 Futures 模式设计 API 接口是很有意义的。在你的包使用 Futures 模式,且能保持友好的 API 接口。此外Futures 可以通过一个异步的 API 暴露出来。这样你可以以最小的成本将包中的并行计算移到用户代码中。(参见参考文件 18[http://www.golangpatterns.info/concurrency/futures](http://www.golangpatterns.info/concurrency/futures)
## 链接