GoLang協程和管道

2022-02-14 04:44:17 字數 1525 閱讀 3050

1.1~8000查詢素數的例子

package main

import

"fmt"//

向intchan放入1-8000個數

func putnum(intchan chan int

)

//關閉intchan

close(intchan)}//

從 intchan 取出資料,並且判斷是否為素數,如果是,就放入到primechan

func primenum(intchan chan int,primechan chan int,exitchan chan bool

) flag=true

for i:=2;i

}ifflag

}fmt.println(

"當前協程執行結束")

exitchan

<-true

//向管道內標誌協程執行結速

}func main()

go func()

//當exitchan 取出了4個協程結束標誌時,可以關閉primechan管道

//表示所有資料查完成,相關協程已執行結束

close(primechan)

//執行結束管道此時也可以關閉,他的任務已結完成

close(exitchan)

}()//主線程遍歷我們的查詢的素數結果

for fmt.println(

"素數:

",res)

}fmt.println(

"程式執行結束~")

}

2. 個人使用引用型別變數來處理了乙個程式結束問題 (注意:千萬不要這麼寫,可能你的程式永遠也結不了束,應加上lock)

package main

import (

"fmt")

func whritechanone(datachan chan

int,voercode *int

) *voercode++}

func whritechantwo(datachan chan

int,voercode *int

) *voercode++}

func whritechanthree(datachan chan

int,voercode *int

) *voercode++}

func readchandata(datachan chan

int,readchan chan bool,voercode *int

) v,ok :=<-datachan

if !ok

fmt.println(

"協程讀取

",v)

}}func main()

}fmt.println(

"協程讀取結束")

}

關於協程 nodejs和golang協程的不同

nodejs和golang都是支援協程的,從表現上來看,nodejs對於協程的支援在於async await,golang對協程的支援在於goroutine。關於協程的話題,簡單來說,可以看作是非搶占式的輕量級執行緒。一句話概括,上面提到了 可以看作是非搶占式的輕量級執行緒 在多執行緒中,把一段 放...

Golang協程排程

有時候可能會出現這種情況,乙個無恥的goroutine阻止其他goroutine執行。當你有乙個不讓排程器執行的 for迴圈時,這就會發生。package main import fmt func main for done fmt.println done for迴圈並不需要是空的。只要它包含了不...

golang 協程理解

本文總結一下go協程的理解,如有錯誤望請指正。網上都說協程是一種輕量級執行緒,執行緒又是一種輕量級的程序。這話在語言層面看來是沒有錯的,但它們的實現是不同的。執行緒是cpu資源排程的最小單位。協程不由cpu進行排程,由應用程式進行排程,也就是由go進行排程。在go中,協程的排程也有專門的排程器。但g...