Go 言語は最新の強力な同時実行プログラミング言語であり、そのゴルーチンはその最も魅力的な機能の 1 つです。この記事では、Go 言語コルーチンの魅力を探り、特定のコード例を通じてその強力な同時実行機能を示します。
1.コルーチンとは何ですか?
Coroutine は、Go 言語のランタイム環境によって管理される軽量のスレッドです。各 Go コルーチンは独自のスタック領域で実行されるため、コルーチンの作成と破棄のオーバーヘッドは非常に小さくなります。コルーチンを使用すると、同時実行が簡単に実現でき、プログラムのパフォーマンスを向上させることができます。
2. コルーチンの作成
Go 言語では、キーワード go
を使用してコルーチンを作成します。簡単な例を次に示します。
package main import ( "fmt" "time" ) func hello() { fmt.Println("Hello, Go!") } func main() { go hello() time.Sleep(time.Second) }
上記のコードでは、hello
関数を定義し、main
関数 ()# で go hello を使用します。 ##コルーチンを作成しました。コルーチンはバックグラウンドで同時に実行され、「Hello, Go!」を出力します。同時に、
main 関数の
time.Sleep(time.Second) を使用して、コルーチンの出力を観察するためにメインスレッドを一時停止します。
channelが提供されています。以下は簡単な例です:
package main import ( "fmt" ) func producer(ch chan int) { for i := 0; i < 5; i++ { ch <- i } close(ch) } func consumer(ch chan int) { for num := range ch { fmt.Println("Received:", num) } } func main() { ch := make(chan int) go producer(ch) go consumer(ch) for { if _, ok := <-ch; !ok { break } } }上記のコードでは、
Producer コルーチンと
consumer コルーチンを定義し、
channel## を渡します。 # コミュニケーションをとること。 Producer
は channel
にデータを送信し、consumer
は channel
からデータを受信して出力します。最後に、main
関数の for
ループと close
を使用して channel
を正しく閉じ、コルーチンの同期を実現します。 4. コルーチンのスケジューリング
Go 言語のランタイム スケジューラは、論理プロセッサ (プロセッサ) とコルーチンの間で自動的にスケジューリングを行い、コルーチンの公平なスケジューリングと効率を確保します。 。例は次のとおりです。
package main import ( "fmt" "runtime" ) func printNumbers() { for i := 1; i <= 5; i++ { fmt.Println("Number:", i) runtime.Gosched() } } func main() { runtime.GOMAXPROCS(2) // 设置逻辑处理器数量 go printNumbers() go printNumbers() fmt.Scanln() }
上記のコードでは、
runtime.GOMAXPROCS(2) を通じて論理プロセッサの数を 2 に設定し、## を実行する 2 つのコルーチンを作成します。 #printNumbers を同時に実行 関数は数値を出力します。
printNumbers 関数で
runtime.Gosched() を使用して、プロセッサを積極的に放棄し、別のコルーチンに実行の機会を与えます。
5. 概要
以上がGo 言語コルーチンの魅力を探るの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。