Go 语言总结

前言:(搭建并行管道,感受GO语言魅力)

Go 归类总结
Go语言的并发编程
Go语言的安装与开放环境
一个简单的 goroutine
package main
import "strconv"
import "fmt"
func main() {
    taskChan := make(chan string, 3)
    doneChan := make(chan int, 1)

    for i := 0; i < 3; i++ {
        taskChan <- strconv.Itoa(i)
        fmt.Println("send: ", i)
    }

    go func() {
        for i := 0; i < 3; i++ {
            task := <-taskChan
            fmt.Println("received: ", task)
        }
        doneChan <- 1
    }()

    <-doneChan
}
外部排序 - 归并排序

拆分数据源 log1 按节点归并 (k路归并) log1

func Merge(in1, in2 <-chan int)<- chan int  {

	out := make(chan  int,1024)
	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)
		fmt.Println("Merge done:",time.Now().Sub(startTime))
	}()

	return out
}

通道 log1

节点 log1

节点组装 log1

外部排序 -单机版 Pipeline 搭建

示意图 log1 - ReaderSource 节点-支持分块 - MergeN - 搭建归并节点组 - pipeline的搭建及运行 - 观察CPU及线程数量上的使用情况

外部排序 -网络扩展

log1