Golang 標準ライブラリの並行プログラミング ガイド
はじめに:
並行プログラミングは、プログラムのパフォーマンスの問題を解決し、コンピューティング リソースの効率的な使用を実現する重要な手段です。 Golang プログラミング言語では、豊富な同時プログラミング ツールとメソッドが提供されています。この記事では、Golang 標準ライブラリの一般的な並行プログラミング手法をいくつか紹介し、具体的なコード例を通してその使用法と注意事項を説明します。
package main import ( "fmt" "time" ) func printNumbers() { for i := 0; i < 5; i++ { fmt.Printf("%d ", i) time.Sleep(time.Millisecond * 500) } } func printLetters() { for i := 'A'; i < 'F'; i++ { fmt.Printf("%c ", i) time.Sleep(time.Millisecond * 500) } } func main() { go printNumbers() // 启动一个Goroutine,打印数字 go printLetters() // 启动另一个Goroutine,打印字母 time.Sleep(time.Second * 3) // 等待两个Goroutine执行完毕 fmt.Println("Done") }
上記のコードでは、2 つの関数 printNumbers
と printLetters
をそれぞれ定義し、## The # go キーワードは、それぞれ 2 つのゴルーチンとして開始します。
time.Sleep 関数を使用して 2 つのゴルーチンの実行が完了するのを待つと、出力結果に数字と文字が交互に出力されることがわかります。
package main import ( "fmt" "time" ) func worker(id int, jobs <-chan int, results chan<- int) { for job := range jobs { fmt.Printf("Worker %d started job %d ", id, job) time.Sleep(time.Second) fmt.Printf("Worker %d finished job %d ", id, job) results <- job * 2 } } func main() { numJobs := 5 jobs := make(chan int, numJobs) results := make(chan int, numJobs) numWorkers := 3 for w := 1; w <= numWorkers; w++ { go worker(w, jobs, results) } for j := 1; j <= numJobs; j++ { jobs <- j } close(jobs) for a := 1; a <= numJobs; a++ { result := <-results fmt.Println("Result:", result) } }
worker 関数を定義します。対応する処理に応じて、結果が結果チャネルを通じて返されます。 main 関数では、ジョブと結果という 2 つのチャネルをそれぞれ作成し、実行のためにジョブ チャネルを 3 つのゴルーチンに渡しました。次に、for ループを通じて 5 つのジョブをジョブ チャネルに送信し、チャネルを閉じます。最後に、結果チャネルの戻り結果が for ループを通じて受信され、出力されます。
パッケージは、この関数を実装するための WaitGroup タイプを提供します。以下は、WaitGroup の使用例です。
package main import ( "fmt" "sync" "time" ) func worker(id int, wg *sync.WaitGroup) { defer wg.Done() fmt.Printf("Worker %d starting ", id) time.Sleep(time.Second) fmt.Printf("Worker %d done ", id) } func main() { var wg sync.WaitGroup numWorkers := 3 wg.Add(numWorkers) for w := 1; w <= numWorkers; w++ { go worker(w, &wg) } wg.Wait() fmt.Println("All workers done") }
worker 関数を定義します。この関数は、WaitGroup パラメーターを受け取り、対応するタスクを実行し、タスクの実行が完了すると、
Done メソッドを通じて WaitGroup に通知されます。 main 関数では、WaitGroup 変数を作成し、
Add メソッドを通じて待機するゴルーチンの数を指定します。次に、
go キーワードを使用して、対応する数のゴルーチンを開始し、WaitGroup ポインターを各ゴルーチンに渡します。最後に、
Wait メソッドを通じてすべての Goroutine の実行が完了するまで待ちます。
Golang 標準ライブラリで提供される同時プログラミング ツールとメソッドを使用すると、同時実行性の高いプログラムを簡単に実装できます。この記事では、Goroutine、Channel、WaitGroup などの一般的な同時プログラミング手法を紹介し、具体的なコード例で説明します。この記事を学習することで、読者が Golang の同時プログラミング スキルをよりよく習得し、プログラムのパフォーマンスと操作効率を向上できることを願っています。
以上が同時プログラミング ガイド: Golang 標準ライブラリでの並列処理の探索の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。