この記事では、ゴルチンとチャンネルに焦点を当てたGoの同時機能の機能を調査します。 並行性により、同時に同時にそうではありませんが、複数のタスクを同時に処理することができます。 GoRoutines、Goの軽量スレッドは、
キーワードを使用して作成され、同時操作を可能にします。チャネルは、ゴルチン間のコミュニケーションと同期を促進し、データ交換を可能にします。 データを送信しますgo
ch <- value
dockerプルのような例は、これらの概念を示しています:value := <- ch
プログラムは、同時タスクをシミュレートします。 各ゴルウチンは、完了まで進行状況を更新します。ミューテックスは、共有の進行値を更新するときにスレッドの安全性を保証します。 Waitgroupはゴルウチンの完了を同期させます
キー学習package main import ( "fmt" "math/rand" "os" "strconv" "sync" "time" ) func main() { rand.Seed(time.Now().UnixNano()) concurrency, _ := strconv.Atoi(os.Args[1]) // Get concurrency level from command line if concurrency <= 0 { concurrency = 100 // Default concurrency } progress := make([]int, concurrency) var mu sync.Mutex var wg sync.WaitGroup wg.Add(concurrency) for i := 0; i < concurrency; i++ { go func(idx int) { defer wg.Done() for progress[idx] < 100 { mu.Lock() if progress[idx] >= 100 { mu.Unlock() break } inc := rand.Intn(10) + 1 progress[idx] += inc if progress[idx] > 100 { progress[idx] = 100 } mu.Unlock() time.Sleep(time.Duration(rand.Intn(400)+100) * time.Millisecond) } }(i) } done := make(chan struct{}) go func() { wg.Wait() close(done) }() <-done // Wait for all goroutines to complete fmt.Println("Progress:", progress) }
この例は、ゴルチンの作成と同時処理のための
この探索は、
キーワードの使用を強調しています。 Goroutinesが複数の進行状況インジケーターを同時に処理する方法を示しています さらなる調査の機能(カウンターの増加/減少と
でのブロック)、ミューテックス(人種条件の防止)、およびそれらを省略した結果に関する疑問を提起します。 人種条件を検出するためのフラグは、さらなる調査を必要とします。
以上がGoの並行性、ゴルチン、およびチャネル:研究の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。