14.14 并行化大量数据的计算

    一个典型的用于解决按顺序执行每个步骤的顺序流水线算法可以写成下面这样:

    如果你仔细想想,你很快就会发现这将会造成巨大的时间浪费。

    1. func ParallelProcessData (in <-chan *Data, out chan<- *Data) {
    2. preOut := make(chan *Data, 100)
    3. stepAOut := make(chan *Data, 100)
    4. stepCOut := make(chan *Data, 100)
    5. go PreprocessData(in, preOut)
    6. go ProcessStepA(preOut,StepAOut)
    7. go ProcessStepB(StepAOut,StepBOut)
    8. }

    通道的缓冲区大小可以用来进一步优化整个过程。