亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

搭建并行處理管道,感受GO語言魅力

難度中級
時長 2小時17分
學習人數
綜合評分9.67
51人評價 查看評價
9.9 內容實用
9.5 簡潔易懂
9.6 邏輯清晰
  • func?ReadSource(reader?io.Reader)?<-chan?int?{
    ???out?:=?make(chan?int)
    ???go?func()?{
    ??????buffer?:=?make([]byte,?8)
    ??????for??{
    ?????????n,?err?:=?reader.Read(buffer)
    ?????????if?n?>?0?{
    ????????????v?:=?int(binary.BigEndian.Uint64(buffer))
    ????????????out?<-?v
    ?????????}
    ?????????if?err?!=?nil?{
    ????????????break
    ?????????}
    ??????}
    ??????close(out)
    ???}()
    ???return?out
    }
    
    func?WriteSink(writer?io.Writer,?in?<-chan?int)??{
    ???for?v?:=?range?in?{
    ??????buffer?:=?make([]byte,?8)
    ??????binary.BigEndian.PutUint64(buffer,?uint64(v))
    ??????writer.Write(buffer)
    ???}
    }
    
    func?RandomSource(count?int)?<-chan?int{
    ???out?:=?make(chan?int)
    ???go?func()?{
    ??????for?i?:=?0;?i?<?count;?i++?{
    ?????????out?<-?rand.Int()
    ??????}
    ??????close(out)
    ???}()
    ???return?out
    }
    func?main()?{
    ???const?filename?=?"large.in"
    ???const?n?=?100000000
    ???file,?err?:=?os.Create(filename)
    ???if?err?!=?nil?{
    ??????panic(err)
    ???}
    ???defer?file.Close()
    
    ???p?:=?pipeline.RandomSource(n)
    ???writer?:=?bufio.NewWriter(file)
    ???pipeline.WriteSink(writer,?p)
    ???writer.Flush()
    
    ???file,?err?=?os.Open(filename)
    ???if?err?!=?nil?{
    ??????panic(err)
    ???}
    ???defer?file.Close()
    
    ???p?=?pipeline.ReadSource(bufio.NewReader(file))
    ???count?:=?0
    ???for?v?:=?range?p?{
    ??????fmt.Println(v)
    ??????count++
    ??????if?count?>=?100?{
    ?????????break
    ??????}
    ???}
    }


    查看全部
    2 采集 收起 來源:文件讀寫

    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 采集 收起 來源:歸并排序算法

    2022-07-23

  • 外部排序切分

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

    2022-07-23

  • 將數據分為左右兩半,分別歸并排序,再把兩個有序數據歸并

    如何歸并:

    • [1, 3, 6, 7], [1, 2, 3, 5] → 1

    • [3, 6, 7],[1, 2, 3, 5] ? → 1

    • [3, 6, 7], [2, 3, 5] ? ? ? ?→ 2

    • [3,6,7],[3, 5] ? ? ? ? ? ?→?3

    • ……


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

    2020-07-26

  • package?main
    
    import?(
    ???"fmt"
    ???"sort"
    )
    
    func?main()?{
    ???//?create?a?slice?of?int
    ???a?:=?[]int{3,?6,?2,?1,?9,?10,8}
    ???sort.Ints(a)
    
    ???for?_,?v?:=?range?a?{
    ??????fmt.Println(v)
    ???}
    }


    查看全部
    0 采集 收起 來源:內部排序示例

    2020-07-25

  • package?main
    
    import?(
    ???"fmt"
    )
    
    func?main()?{
    ???ch?:=?make(chan?string)
    
    ???for?i:=0;?i?<?5000;?i++?{
    ??????//?go?starts?a?goroutine
    ??????go?printHelloWorld(i,?ch)
    ???}
    
    ???for??{
    ??????msg?:=?<-?ch
    ??????fmt.Println(msg)
    ???}
    }
    
    func?printHelloWorld(i?int,?ch?chan?string)?{
    ???for??{
    ??????ch?<-?fmt.Sprintf("Hello?world?from?go?routine?%d!\n",?i)
    ???}
    }


    查看全部
  • package?main
    
    import?(
    ???"fmt"
    ???"net/http"
    )
    
    func?main()?{
    ???http.HandleFunc("/",?func(writer?http.ResponseWriter,?request?*http.Request)?{
    ??????fmt.Fprintf(writer,?"<h1>Hello?World?%s!<h1>",?request.FormValue("name"))
    ???})
    
    ???http.ListenAndServe(":8888",?nil)
    }


    查看全部
  • Hello World

    • 普通 Hello World

    • Hello World Server - 讀取 url 中的參數

    • 并發 Hello World - 初識 goroutine 與 channel

    • 一個簡單的排序


    查看全部
  • Hello World

    • 普通 Hello World

    • Hello World Server - 讀取 url 中的參數


    查看全部

舉報

0/150
提交
取消
課程須知
1、了解一門編程語言,對基本算法如排序有了解
老師告訴你能學到什么?
1、go語言的歷史和設計初衷 2、go語言的安裝與開發環境 3、簡單的go語言程序 4、了解go語言并發編程 5、實現一個并行數據處理管道

微信掃碼,參與3人拼團

微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號

友情提示:

您好,此課程屬于遷移課程,您已購買該課程,無需重復購買,感謝您對慕課網的支持!