Go 言語レベルでの同時実行性とは、Go 言語を使用して同じ期間内に複数のタスクを実行することを意味します。Go 言語の同時実行性は goroutine を通じて実現されます。Goroutine はスレッドに似ており、ユーザー モード スレッドに属します。必要に応じて何千ものゴルーチンを作成でき、何万ものゴルーチンが同時に動作します。
#この記事の動作環境: Windows 10 システム、go1.20 バージョン、dell g3 コンピューター。
Go 言語レベルでの同時実行性とは、Go 言語を使用して複数のタスクを同時に実行することを意味します。
同時実行性はプログラミングにおいて非常に重要な概念であり、Go 言語は本質的に言語レベルで同時実行性をサポートしています。
同時実行性と並列処理
同時実行性: 同じ期間内に複数のタスクを実行します (例: WeChat を使用して 2 人のガールフレンドとチャットする)。
並行: 複数のタスクを同時に実行します (例: あなたとあなたの友人がガールフレンドと WeChat でチャットしています)。
Go 言語の同時実行性はゴルーチンによって実現されます。ゴルーチンはスレッドに似ています (スレッドとプロセスはオペレーティング システムから派生した概念です。プロセスは大きな作業場に相当し、CPU は工場に相当します)。工場には多くのワークショップがあります。プロセスは工場をワークショップに分割します。スレッドはワーカーやプロセス上のさまざまなリソースなどのプロセスに分割されます。プロセスには少なくとも 1 つのスレッドがあります。)、ユーザー モードに属するスレッド、必要に応じて作成できます。何千ものゴルーチンが同時に動作します。 Goroutine は Go 言語のランタイムによってスケジュールされ、2 番目のスレッドはオペレーティング システムによってスケジュールされます。
Go 言語は、複数のゴルーチン間で通信するためのチャネルも提供します。 Goroutine とチャネルは、Go 言語が CSP (共有メモリではなく共有メモリを介した通信を促進する) 同時実行モードに準拠するための重要な実装基盤です
拡張子:
goroutine
スレッドと同様、言語レベルで実装され、オペレーティング システムのスレッド上で実行されます。
ゴルーチンは関数に対応する必要があり、同じ関数を実行するために複数のゴルーチンを作成できます。
go で goroutine を使用すると非常に便利です。関数を呼び出すときに、先頭に go キーワードを追加して関数の goroutine を作成します。
単一のゴルーチンを開始します:
package main import ( "fmt" "sync" ) var wg sync.WaitGroup //WaitGroup等待方法 // goroutine demo func hello(i int){ fmt.Println("Hello hello",i) wg.Done() //此方法如果运行 ,通知wg把计数器 -1 } func main() { // 开启一个主goroutine去执行mian函数 wg.Add(10000)//(计数器)只有一个小弟为1,等待wg.Done()后-1,为0时停止等待 for i:=0; i<10000;i++{ //wg.Add(1) 可以给定10000个goroutine 也可以,每次循环+1 go hello(i) // 开启了一个独立的 goroutine去执行hello这个函数 } fmt.Println("Hello main") // 让我们的主goroutine 等待 goroutine 小弟 执行 // 如果不等待,独立的goroutine小弟,可能小弟这个goroutine还没有运行 //time.Sleep(time.Second) 第二种等待 wg.Wait()//等待所有小弟干完活 }
ゴルーチンとスレッドの違い
OS スレッド (オペレーティング システム スレッド) には固定スタック メモリがあります (通常は2MB)、ゴルーチンのスタックにはライフサイクルの開始時に小さなスタックしかありません (通常は 2KB)。ゴルーチンのスタックは固定されていません。必要に応じて拡大および縮小できます。ゴルーチンのスタック サイズ制限は 1GB に達する可能性があります。ただし、1GB に達することはほとんどありません。したがって、Go 言語では一度に約 100,000 個のグロルーチンを作成することが可能です。
以上がGo 言語レベルでの同時実行とは何を意味しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。