Go 関数は、チャネル、待機グループまたはチャネル制御実行フロー、ミューテックスまたはチャネル同期タスクを通じてデータを渡すことによって、Goroutine と対話します。 データの受け渡し: チャネルを FIFO キューとして使用して、関数からコルーチンに値を送受信します。実行フローを制御します。待機グループを使用してコルーチンの実行が完了するまで待機するか、チャネルを使用してコルーチンに特定の操作を実行するように通知します。同期タスク: ミューテックスまたはチャネルを使用して、同時にアクセスされるリソースを同期し、一度に 1 つのコルーチンのみがリソースにアクセスできるようにします。
#Go 関数はどのように Goroutine と対話するのでしょうか?
Go では、Goroutine は同時に実行される軽量のスレッドです。これにより、コードを並列実行できるようになり、アプリケーションのパフォーマンスが向上します。関数はコルーチンと対話して、実行フローの制御、データの受け渡し、タスクの同期を行うことができます。
データの受け渡し
データは、チャネルを通じて関数からコルーチンに渡すことができます。チャネルは、コルーチンが関数から値を送受信できるようにする FIFO (先入れ先出し) キューです。次の例は、チャネルの使用方法を示しています。
package main import "fmt" func sendData(ch chan<- int) { for i := 0; i < 10; i++ { ch <- i } close(ch) } func receiveData(ch <-chan int) { for { data, ok := <-ch if !ok { return } fmt.Println("Received:", data) } } func main() { ch := make(chan int) go sendData(ch) receiveData(ch) }
実行フローの制御
待機グループまたはチャネルを使用して、コルーチンの実行フローを制御できます。待機グループを使用すると、すべてのコルーチンの実行が完了するまで待機できます。一方、チャネルを使用して、コルーチンに特定のアクションを実行するように通知できます。次の例は、待機グループの使用方法を示しています。
package main import ( "fmt" "sync" ) var wg sync.WaitGroup func task(i int) { fmt.Println("Task", i) wg.Done() } func main() { for i := 0; i < 10; i++ { wg.Add(1) go task(i) } wg.Wait() }
同期タスク
同時にアクセスされるリソースは、ミューテックスまたはチャネルを通じて同期できます。ミューテックス ミューテックスを使用すると、一度に 1 つのコルーチンがリソースにアクセスできます。チャネルを使用すると、リソースが利用可能になるまでコルーチンをブロックできます。次の例は、ミューテックスの使用方法を示しています:
package main import ( "fmt" "sync" ) var mutex sync.Mutex func task(data string) { mutex.Lock() fmt.Println(data) mutex.Unlock() } func main() { for i := 0; i < 10; i++ { go task(fmt.Sprintf("Task %d", i)) } }
以上がgolang 関数は goroutine とどのように相互作用するのでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。