.goroutineについて
- Golang最も魅力的な利点は、言語のレベルからの同時サポートするということです
- Golangにゴルーチン(コルーチン)は、他の言語における類似の糸であります
- 並行並列
- パラレル(並列)の異なるコード・セグメントは、異なる物理プロセッサ上でサポート手段
- 並行処理(同時実行)は、同時に物理プロセッサ上の他のものの上のコンテンツの後半分を実行することができ、複数のものを管理するために指し、
- 一般的には、コンピュータの物理的なリソースが少ないと、固定されているため、同時並行のパフォーマンスよりも優れているようだ、とプログラムの内容はたくさんある実行する必要があります。同時性があるので、「より少ないリソースでより多くの事をします。」
- いくつかの主流の同時実行モデル
- 複数のスレッドは、それぞれが唯一のリクエストを処理し、唯一要求の後、スレッドは次のリクエストを受信する。このモードでは、高い並行性、優れたパフォーマンス・オーバーヘッドを。
- これは、ランニングコストとメンテナンスコストの過程でコールバックコールバックベースの非同期IOを大量に生産することが増加し、プログラムの実行の流れにつながる簡単な思考ではありません
- 。Golangは、言語レベルをサポートするために、他の言語(カーネルモードとユーザーモード)で少しサポート、コルーチンは、効果的にマルチスレッドモードの欠点を補うために、スレッドの同時実行タスクを向上させることができ、先制コールを必要としません。
- ゴルーチン構文
- 式は、単一の文にすることができます
- もしあれば式は、関数ことができ、関数は、値を返す関数の実行が完了すると、無効である、自動的にこのゴルーチンを終了
go 表达式
II。コード例
- ゴルーチンの使用の機能や効果に対する複数の呼び出しのコントラスト
package main
import "fmt"
import "time"
func main() {
//正常调用,输出3遍1 2 3 4 5(每个数字后换行)
//for i:=1; i<=3; i++ {
// go demo()
//}
/*
添加go关键字后发现控制台什么也没有输出
原因:把demo()设置到协程后没等到函数执行,主
线程执行结束
*/
for i := 1; i <= 3; i++ {
go demo(i)
}
}
func demo(index int) {
for i := 1; i <= 5; i++ {
fmt.Printf("第%d次执行,i的值为:%d\n", index, i)
}
}
- 実行が終了するのゴルーチン休眠待機を追加
- このように大きな問題が小さすぎる設定されている場合睡眠時間があまりにも大きく設定されている場合、それは、プログラムの実行の影響を実行していないゴルーチンも睡眠時間、睡眠時間である。睡眠時間の実行次のプログラムの実行を見つけるために、睡眠時間が「大きすぎる」または「小さすぎる」であってもよいとき
- これは、デモプログラムを()を実行することにより、各結果が同時実行されているので、各実行結果は、必ずしも同じではないことがわかりました
package main
import "fmt"
import "time"
func main() {
//正常调用,输出3遍1 2 3 4 5(每个数字后换行)
//for i:=1; i<=3; i++ {
// go demo()
//}
/*
添加go关键字后发现控制台什么也没有输出
原因:把demo()设置到协程后没等到函数执行,主
线程执行结束
*/
for i := 1; i <= 3; i++ {
go demo(i)
}
/*
添加休眠,让主线程等待协程执行结束.
具体休眠时间需要根据计算机性能去估计
次数没有固定值
*/
time.Sleep(3e9)
fmt.Println("程序执行结束")
}
func demo(index int) {
for i := 1; i <= 5; i++ {
fmt.Printf("第%d次执行,i的值为:%d\n", index, i)
}
}