golang的协程初体验 加 效率提升说明 注意todo释义

package main

import (
    "fmt"
    "time"
)

func put(intchan chan int){

    for i:=1;i<=130000;i++{
        intchan    <-i
    }
    close(intchan)
}

func prime(intchan chan int,primechan chan int,exitchan chan int64){
    //var num int
    var flag bool
    for{
        num,ok:=<-intchan
        if(!ok){
            break
        }
        flag=true
        for i:=2;i<num;i++{
            if num%i==0{
                flag=false
                break
            }
        }

        if flag{
            primechan<-num

        }

    }
    fmt.Println("one goroutine done")
    exitchan<- (time.Now().UnixNano())
}

func main(){
    btime:=time.Now().Unix()
//
//    for num:=1;num<=130000;num++{
//        for i:=2;i<num;i++{
//            if num%i==0{
//                break
//            }
//        }
//    }
//    etime2:=time.Now().Unix()
//    fmt.Println(etime2-btime)
//return

    intchan:=make(chan int,80000)
    primechan:=make(chan int,200000)
    //exitchan:=make(chan bool,16)
    exitchan:=make(chan int64,16)
    //exitchan2:=make(chan int64,16)

    go put(intchan)
    var gonum =4   //其实上面这个go 也占一个协程  所以估计 3个和4个下列协程应该效率一致
    for i:=1;i<=gonum;i++{
        go prime(intchan,primechan,exitchan)

    }



    //用匿名协程跑这个
    //go func(){

        fmt.Println(time.Now().UnixNano())
//close(exitchan2)
    //todo  这里只能为4   携程数量  因为没有关闭exitchan   所以只能读4个  这里应该是阻塞读

        for i:=1;i<=gonum;i++{
            fmt.Println("\n in=>",time.Now().UnixNano())

            v:=<-exitchan

            // todo  为什么这里用这个没有写入管道的exitchan2 会直接超时  ===》 底层底层 还是底层
            //<-exitchan2


            fmt.Printf("%T %v\n",v,v)
            fmt.Println("\n out=>",time.Now().UnixNano())
        }
        close(primechan)
        etime:=time.Now().Unix()
        fmt.Println(etime-btime)

    //}()


    //var times = 0
    //for{
    //    //如果不关闭   最后一次没有打印出ok 为false的
    //    times++
    //    sd,ok:=<-primechan
    //    fmt.Println(ok,times,"value",sd)
    //
    //
    //    if !ok{
    //        break
    //    }
    //    //fmt.Println("sushu,",res)
    //}

}

您可以自由的转载和修改,但请务必注明文章来源并且不可用于商业目的。
本站大部分内容收集于互联网,如果有侵权内容、不妥之处,请联系删除。敬请谅解!

添加新评论

  关于博主【WANG-FEiHU】

Duplicate
-----------Complicate
--------------------------Appreciate
-----------------------------------------Fate

闻先后,术专攻
三人有师
习得文武艺,货与帝王家
人性不曾变,资本永无眠

-----------花有重开日,人无再少年-----------

  分类目录

  monitor(TD)

不放弃

不怕万人阻挡,只怕自己投降。

人家的时间都用在了努力,而你的时间却用在了选择,当你将放弃当作一种习惯,你一辈子也不会有出息。

知其所以然

鲜衣怒马,绝代风华。 we are the world

Je le sais continue c'est pas bon,A la fin tu restes pas longtemps