<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      ex1

      package main
      /*
      goroutine 是由GO運行時管理的輕量級線程
      go f(x,y, z) 就啟動了一個goroutine, 其中f,x,y,z在當(dāng)前goroutine中立即計算, f內(nèi)容的執(zhí)行在另一個新goroutine中。
      所有的goroutine都是運行在同一個地址空間中, 所有訪問共享內(nèi)存時,必須進(jìn)行同步處理。
      在sync包中上, 提供了同步需要的原語
      */
      import (
      	"fmt"
      	"time"
      )
      
      func say(s string) {
      	for i := 0; i < 5; i++ {
      		time.Sleep(100 * time.Millisecond)
      		fmt.Println(s)
      	}
      }
      
      func main() {
      	go say("world")
      	say("hello")
      }
      
      

      ex2

      package main
      
      
      /*
      Channels 就管道,就是劇導(dǎo)管, 你可能管道操作符進(jìn)行讀寫, 操作符為 <-
      ch <- v    // 把 v 寫入管道
      v := <-ch  // 從 ch 管道中讀出到 v 變量中
      數(shù)據(jù)的流向, 就箭頭的指向。
      所有 maps , slices, channels 復(fù)雜結(jié)構(gòu)都需要通過make來創(chuàng)建
      ch := make (chan int)
      默認(rèn)情況下, 發(fā)收都需要對端準(zhǔn)備好了才行, 這樣的前提使得goroutine同步就不需要顯式的鎖處理,降低了復(fù)雜度,簡化的設(shè)計。
      
      下面示例代碼, 對slice的值求和。 分布式的工作在兩個goroutine中。當(dāng)其兩個完成計算時,最終結(jié)果也計算出來了
      */
      
      import "fmt"
      
      func sum(s []int, c chan int) {
      	sum := 0
      	for _, v := range s {
      		sum += v
      	}
      	c <- sum // send sum to c
      }
      
      func main() {
      	s := []int{7, 2, 8, -9, 4, 0}
      
      	c := make(chan int)
      	go sum(s[:len(s)/2], c)
      	go sum(s[len(s)/2:], c)
      	x, y := <-c, <-c // receive from c
      
      	fmt.Println(x, y, x+y)
      }
      
      

      ex3

      /*
      Channels 就管道
      導(dǎo)管通過第二個參數(shù),是可以指定其緩存長度的
      ch := make(chan int, 100)
      當(dāng)管道滿時, 發(fā)送會阻塞
      當(dāng)管道空時, 接收會阻塞
      
      修改下面的代碼,可以進(jìn)行測試一下
      */
      
      package main
      
      import (
      	"fmt"
      	"time"
      )
      
      // 例1、寫阻塞等待
      func put_chan(ch chan int, n int)  {
      	for i := 0 ; i < n;  i++{
      		fmt.Println("put: ", i, time.Now().UTC())
      		ch <- i
      	}
      	close(ch)
      }
      
      func read_chan(ch chan int, quit chan int)  {
      	for c := range ch{
      		time.Sleep(time.Duration(time.Second * 3))
      		fmt.Println(c, time.Now().UTC())
      	}
      	time.Sleep(time.Duration(time.Second * 3))
      	quit <- 1
      }
      func main() {
      	ch := make(chan int, 2)
      	quit := make(chan int)
      	go put_chan(ch, 10)
      	go read_chan(ch, quit)
      
      
      	fmt.Println("end", <- quit, time.Now().UTC())
      
      }
      
      //// 例2、讀阻塞等待
      //func put_chan(ch chan int, n int)  {
      //	for i := 0 ; i < n;  i++{
      //		time.Sleep(time.Duration(time.Second * 3))
      //		ch <- i
      //	}
      //	time.Sleep(time.Duration(time.Second * 3))
      //	close(ch)
      //}
      //
      //func read_chan(ch chan int, quit chan int)  {
      //	for c := range ch{
      //		fmt.Println(c, time.Now())
      //	}
      //	quit <- 1
      //}
      //func main() {
      //	ch := make(chan int, 2)
      //	quit := make(chan int)
      //	go put_chan(ch, 2)
      //	go read_chan(ch, quit)
      //
      //
      //	fmt.Println("end", <- quit, time.Now())
      //
      //}
      
      // 例3、測試中發(fā)現(xiàn),系統(tǒng)檢測會出現(xiàn)死鎖
      //func main() {
      //	ch := make(chan int, 2)
      //	ch <- 1
      //	ch <- 2
      //	fmt.Println(<-ch)
      //	fmt.Println(<-ch)
      //  fmt.Println(<-ch)
      //	fmt.Println("end")
      //
      //}
      
      

      ex4

      /*
      Channels Range & Close 范圍排列與關(guān)閉
      發(fā)送者可以通過關(guān)閉通道來通知沒有更多數(shù)據(jù)需要發(fā)送了。
      接收者可以檢測通道是否已經(jīng)關(guān)閉了,通過指定第二個參數(shù)來實現(xiàn),具體如下
      v , ok := <- ch
      當(dāng)ok為false, 則通道已經(jīng)關(guān)閉,沒有數(shù)據(jù)了。
      或者可以使用循環(huán) for i := range c 來取數(shù)據(jù),至到通道關(guān)閉。
      注意<慣例>:
         1. 應(yīng)該只讓發(fā)送者來關(guān)閉通道。 絕對不要讓接收者來關(guān)閉。 在一個已經(jīng)關(guān)閉了的通道上發(fā)數(shù)據(jù)會引發(fā)panic
         2. 通道,只在最終不要了, 需要終止的時候才來關(guān)閉之
      */
      
      package main
      
      import (
      	"fmt"
      )
      
      func fibonacci(n int, c chan int) {
      	x, y := 0, 1
      	for i := 0; i < n; i++ {
      		c <- x
      		x, y = y, x+y
      	}
      	close(c)
      }
      
      func main() {
      	c := make(chan int, 10)
      	go fibonacci(cap(c), c)
      	for i := range c {
      		fmt.Println(i)
      	}
      }
      
      

      ex5

      /*
      Channels  select  選擇查詢操作
      選擇查詢語句, 讓當(dāng)前goroutine 等待多個通訊操作
      當(dāng)沒有條件滿足時, select阻塞
      當(dāng)有  條件滿足時, select執(zhí)行
      當(dāng)有多條件滿足時, select隨機執(zhí)行滿足條件之一
      */
      
      package main
      
      import "fmt"
      
      func fibonacci(c, quit chan int) {
      	x, y := 0, 1
      	for {
      		select {
      		case c <- x:    // 寫
      			x, y = y, x+y
      		case <-quit:    // 讀
      			fmt.Println("quit")
      			return
      		}
      	}
      }
      
      func main() {
      	c := make(chan int)
      	quit := make(chan int)
      	go func() {
      		for i := 0; i < 10; i++ {
      			fmt.Println(<-c)
      		}
      		quit <- 0
      	}()
      	fibonacci(c, quit)
      }
      

      ex6

      /*
      Channels  select  選擇查詢操作
      缺省選擇, 當(dāng)沒有case條件滿足時, 直接選擇默認(rèn)條件
      */
      
      package main
      
      import (
      	"fmt"
      	"time"
      )
      
      func main() {
      	tick := time.Tick(100 * time.Millisecond)
      	boom := time.After(500 * time.Millisecond)
      	for {
      		select {
      		case <-tick:
      			fmt.Println("tick.")
      		case <-boom:
      			fmt.Println("BOOM!")
      			return
      		default:
      			fmt.Println("    .")
      			time.Sleep(50 * time.Millisecond)
      		}
      	}
      }
      
      posted on 2019-03-12 17:59  陳峰  閱讀(170)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 亚洲最大日韩精品一区| 日韩精品无码免费专区午夜不卡| 日韩中文免费一区二区| 激情综合色区网激情五月| 国产91精品丝袜美腿在线 | 好男人视频www在线观看| 亚洲热线99精品视频| 骚虎视频在线观看| 国产精品亚洲一区二区在| 高淳县| 亚洲日本欧美日韩中文字幕| 国产999久久高清免费观看| 又色又污又爽又黄的网站| 精品偷拍被偷拍在线观看| 开心久久综合激情五月天| 少妇高潮太爽了在线视频| 国产成人无码AV片在线观看不卡 | 清纯唯美经典一区二区| 久热综合在线亚洲精品| 中文毛片无遮挡高潮免费| 蜜臀av一区二区三区在线| 国产系列高清精品第一页| 久久天天躁狠狠躁夜夜躁| 国产台湾黄色av一区二区| 亚洲一区二区中文字幕| 精品国产乱码久久久人妻| 女人与公狍交酡女免费| 亚洲少妇人妻无码视频| 少妇精品导航| 久久夜色精品久久噜噜亚| 国产精品久久久国产盗摄| 亚洲精品网站在线观看不卡无广告 | 大尺度国产一区二区视频| 99久久婷婷国产综合精品| 日本边添边摸边做边爱| 老熟妇高潮一区二区三区| 日韩成av在线免费观看| 麻豆亚洲精品一区二区| 粗壮挺进邻居人妻无码| 狼人大伊人久久一区二区| 久久综合香蕉国产蜜臀av|