1.1~8000查詢素數的例子
package mainimport
"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 mainimport (
"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...