为了账号安全,请及时绑定邮箱和手机立即绑定

搭建并行处理管道,感受GO语言魅力

难度中级
时长 2小时17分
学习人数
综合评分9.67
51人评价 查看评价
9.9 内容实用
9.5 简洁易懂
9.6 逻辑清晰
  • Go语言编程范式:面向接口、函数式编程、并发编程。

    查看全部
    0 采集 收起 来源:go语言设计

    2020-10-26

  • 各个编程语言的使用场景.

    查看全部
    0 采集 收起 来源:go语言设计

    2020-10-25


  • 外部排序pipeline


    查看全部
    0 采集 收起 来源:归并排序算法

    2020-08-31

  • 节点的组装,

    传统语言与Go语言 对比

    查看全部
    0 采集 收起 来源:归并排序算法

    2020-08-31

  • go run [file]
    go build [file]
    [bin]


    查看全部
  • 网络的扩展

    查看全部
  • 网络的扩展

    查看全部
  • 单机版外部排序 pipeline

    • Reader Source 节点-支持分块

    • Mergen-搭建归并节点组

    • pipeline 的搭建及运行——CPU 及线程数量的观测


    查看全部
  • package main

    import (
      "bufio"
      "ccmouse/gointro/pipeline"
      "fmt"
      "os"
    )

    func main() {
      p := createPipeline("small.in", 512, 4)
      writeToFile(p, "small.out")
      printFile("small.out")
    }

    func printFile(filename string) {
      file, err := os.Open(filename)
      if err != nil {
         panic(err)
      }
      defer file.Close()

      p := pipeline.ReadSource(file, -1)
      for v := range p {
         fmt.Println(v)
      }
    }

    func writeToFile(p <-chan int, filename string) {
      file, err := os.Create(filename)
      if err != nil {
         panic(err)
      }
      defer file.Close()

      writer := bufio.NewWriter(file)
      defer writer.Flush()

      pipeline.WriteSink(writer, p)
    }

    func createPipeline(
      filename string,
      filesize, chunkCount int) <-chan int {
      chunkSize := filesize / chunkCount

      var sortResults []<-chan int
      for i := 0; i < chunkCount; i++ {
         file, err := os.Open(filename)
         if err != nil {
            panic(err)
         }

         file.Seek(int64(i * chunkSize), 0)

         source := pipeline.ReadSource(
            bufio.NewReader(file), chunkSize)

         sortResults = append(sortResults, pipeline.InMemSort(source))
      }

      return pipeline.MergeN(sortResults...)
    }


    查看全部
    0 采集 收起 来源:完整外部排序

    2020-07-26

  • package pipeline
    
    import (
       "encoding/binary"
       "io"
       "sort"
    )
    
    func  ArraySource(a ...int) <-chan int {
       out := make(chan int)
       go func() {
          for _, v := range a{
             out <- v
          }
          close(out)
       }()
       return out
    }
    
    func InMemSort(in <-chan int) <-chan int {
       out := make(chan int)
       go func() {
          // Read into memory
          var a []int
          for v := range in {
             a = append(a, v)
          }
    
          // Sort
          sort.Ints(a)
    
          // Output
          for _, v := range a {
             out <- v
          }
          close(out)
       }()
       return out
    }
    
    func Merge(in1, in2 <-chan int) <-chan int {
       out := make(chan int)
       go func() {
          v1, ok1 := <-in1
          v2, ok2 := <-in2
          for ok1 || ok2 {
             if !ok2 || (ok1 && v1 <= v2) {
                out <- v1
                v1, ok1 = <-in1
             } else {
                out <- v2
                v2, ok2 = <-in2
             }
          }
          close(out)
       }()
       return out
    }
    package main
    
    import (
       "ccmouse/gointro/pipeline"
       "fmt"
    )
    
    func main() {
       p := pipeline.Merge(
          pipeline.InMemSort(
             pipeline.ArraySource(3, 2, 6, 7, 4)),
          pipeline.InMemSort(
             pipeline.ArraySource(7, 4, 0, 3, 2, 13, 8)))
       for v := range p {
          fmt.Println(v)
       }
    }


    查看全部
    0 采集 收起 来源:归并节点

    2020-07-26

  • 一些节点

    • 数组数据源节点- channel 的关闭及检测

    • 内部排序节点

    • 归并节点


    查看全部
    0 采集 收起 来源:归并节点

    2020-07-26

  • 外部排序 Pipeline

    查看全部
    0 采集 收起 来源:归并排序算法

    2022-07-23

  • 节点的组装

    查看全部
    0 采集 收起 来源:归并排序算法

    2022-07-23

  • 节点多输入和多输出

    查看全部
    0 采集 收起 来源:归并排序算法

    2022-07-23

  • Pipeline

    查看全部
    0 采集 收起 来源:归并排序算法

    2022-07-23

举报

0/150
提交
取消
课程须知
1、了解一门编程语言,对基本算法如排序有了解
老师告诉你能学到什么?
1、go语言的历史和设计初衷 2、go语言的安装与开发环境 3、简单的go语言程序 4、了解go语言并发编程 5、实现一个并行数据处理管道

微信扫码,参与3人拼团

意见反馈 帮助中心 APP下载
官方微信
友情提示:

您好,此课程属于迁移课程,您已购买该课程,无需重复购买,感谢您对慕课网的支持!