西西軟件下載最安全的下載網(wǎng)站、值得信賴的軟件下載站!

首頁編程開發(fā)其它知識 → Go語言并發(fā)之美:解釋其中內(nèi)核、外延

Go語言并發(fā)之美:解釋其中內(nèi)核、外延

相關(guān)軟件相關(guān)文章發(fā)表評論 來源:微博時間:2012/11/28 13:47:54字體大。A-A+

作者:顏開點(diǎn)擊:71次評論:0次標(biāo)簽: Go語言

Flash版LOGO語言V9.8 免費(fèi)簡體中文版
  • 類型:編程工具大。3.2M語言:中文 評分:6.3
  • 標(biāo)簽:
立即下載
6 頁 ChainFilter技術(shù)

ChainFilter技術(shù)

      前面提到了Future技術(shù)首尾相連,可以形成一個并發(fā)的pipe filter。這種方式可以做很多事情,如果每個Filter都由同一個函數(shù)組成,還可以有一種簡單的辦法把他們連起來。

由于每個Filter協(xié)程都可以并發(fā)運(yùn)行,這樣的結(jié)構(gòu)非常有利于多核環(huán)境。下面是一個例子,用這種模式來產(chǎn)生素?cái)?shù)。

// Aconcurrent prime sieve

packagemain

// Sendthe sequence 2, 3, 4, ... to channel 'ch'.

funcGenerate(ch chan<- int) {

         for i := 2; ; i++ {

                  ch<- i // Send 'i' to channel 'ch'.

         }

}

// Copythe values from channel 'in' to channel 'out',

//removing those divisible by 'prime'.

funcFilter(in <-chan int, out chan<- int, prime int) {

         for {

                   i := <-in // Receive valuefrom 'in'.

                   if i%prime != 0 {

                            out <- i // Send'i' to 'out'.

                   }

         }

}

// Theprime sieve: Daisy-chain Filter processes.

funcmain() {

         ch := make(chan int) // Create a newchannel.

         go Generate(ch)      // Launch Generate goroutine.

         for i := 0; i < 10; i++ {

                   prime := <-ch

                   print(prime, "\n")

                   ch1 := make(chan int)

                   go Filter(ch, ch1, prime)

                   ch = ch1

         }

}

        上面的程序創(chuàng)建了10個Filter,每個分別過濾一個素?cái)?shù),所以可以輸出前10個素?cái)?shù)。   

        Chain-Filter通過簡單的代碼創(chuàng)建并發(fā)的過濾器鏈。這種辦法還有一個好處,就是每個通道只有兩個協(xié)程會訪問,就不會有激烈的競爭,性能會比較好。

    相關(guān)評論

    閱讀本文后您有什么感想? 已有人給出評價(jià)!

    • 8 喜歡喜歡
    • 3 頂
    • 1 難過難過
    • 5 囧
    • 3 圍觀圍觀
    • 2 無聊無聊

    熱門評論

    最新評論

    發(fā)表評論 查看所有評論(0)

    昵稱:
    表情: 高興 可 汗 我不要 害羞 好 下下下 送花 屎 親親
    字?jǐn)?shù): 0/500 (您的評論需要經(jīng)過審核才能顯示)
    推薦文章

    沒有數(shù)據(jù)