ホームページ >バックエンド開発 >Golang >Golang 関数の同時実行性とコルーチンの使用ガイド

Golang 関数の同時実行性とコルーチンの使用ガイド

PHPz
PHPzオリジナル
2024-04-27 14:36:02367ブラウズ

Go 言語は、ゴルーチンを通じて同時実行性を実現します。コルーチンは、チャネルを通じて通信する軽量のスレッドです。重要なポイントは次のとおりです。コルーチンは go キーワードを使用して作成され、並列実行されます。コルーチンはプロセス メモリを共有し、チャネルを通じて通信します。同時 Web サーバーの例では、ハンドラー関数は goroutine を使用してリクエストを並列処理します。

Golang 関数の同時実行性とコルーチンの使用ガイド

Go 関数の同時実行性とコルーチンの使用ガイド

同時実行性とコルーチンの概要

同時実行性とは、複数のタスクを同時に実行する機能です。 、コルーチンは、同時実行を可能にする軽量のスレッドです。コルーチンはスレッドよりも軽量で、消費するリソースが少なくなります。

Go の同時実行性

Go 言語は、並列実行する関数である組み込みの goutine を通じて同時実行性を実装します。 go キーワードを使用して goroutine を作成します。 Go の

func main() {
    go incrementCounter()
}

func incrementCounter() {
    // 并发地更新计数器
}

Coroutine

Coroutine は、プロセスのメモリ空間を共有するユーザー空間のスレッドです。 Go では、コルーチンは channel を通じて通信できます。

実用的なケース: 同時 Web サーバー

コルーチンを使用して受信リクエストを処理する同時 Web サーバーを作成してみましょう:

package main

import (
    "fmt"
    "log"
    "net/http"
)

func main() {
    http.HandleFunc("/", handler)
    log.Fatal(http.ListenAndServe(":8080", nil))
}

func handler(w http.ResponseWriter, r *http.Request) {
    go func() {
        // 在协程中处理请求
        fmt.Fprintf(w, "Hello from a goroutine!\n")
    }()
}

上記のコードでは、handler この関数は、go キーワードを使用して、受信リクエストを処理するコルーチンを作成します。コルーチンは並行して実行され、メインスレッドをブロックしません。

注意事項

  • データ競合: 共有データへの同時アクセスによりデータ競合が発生し、予測できない結果が生じます。 sync パッケージのロックまたはアトミック変数を使用して、共有データを保護します。
  • パイプの詰まり: パイプの容量には限界があります。パイプがいっぱいの場合、パイプに空きができるまで送信操作はブロックされます。バッファ付きパイプを使用するか、パイプがいっぱいかどうかを確認してください。
  • コンテキストのキャンセル: コルーチンをキャンセルする必要がある場合は、context.Context を使用してキャンセル要求を伝達します。

以上がGolang 関数の同時実行性とコルーチンの使用ガイドの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。