ホームページ  >  記事  >  バックエンド開発  >  Golang 関数の同時プログラミングにおけるコンテキストの役割

Golang 関数の同時プログラミングにおけるコンテキストの役割

王林
王林オリジナル
2024-04-17 14:27:02670ブラウズ

コンテキスト パッケージは、Golang 関数同時プログラミングでコルーチンの実行を管理するために使用され、キャンセル信号を伝播し、タスクが完了する前にコルーチンが他のコルーチンに割り込むことができるようにする機能を提供します。期限を設定します。期限内にコルーチンが完了しない場合、自動的にキャンセルされます。追加情報を渡して、コルーチン間でキーと値のペアを渡すことができるようにします。

Golang 関数の同時プログラミングにおけるコンテキストの役割

Golang 関数同時プログラミングにおけるコンテキストの役割

context パッケージは Golang での管理に使用されます関数を同時実行するための重要なツール。これにより、コルーチン間でリクエストのキャンセル信号、期限、その他の関連情報を渡す機能が提供されます。

関数

  • ##キャンセル信号の伝播: コンテキストコルーチンがキャンセル信号を送信できるようにし、それによってイニシエーターが許可されるようにします。コルーチンは、タスクが完了する前に実行中のコルーチンを中断します。
  • 期限時間の設定: context期限までにコルーチンが完了しない場合、自動的にキャンセルされます。
  • 値の受け渡し: context任意のタイプのキーと値のペアを運ぶことができ、コルーチン間で追加情報を渡すことができます。

の使用

context オブジェクトを作成するには、context.Background() または # を使用できます。 ## context.WithCancel()<pre class='brush:go;toolbar:false;'>// 创建一个新context,取消信号为默认 ctx := context.Background() // 创建一个带有取消信号的新context ctx, cancel := context.WithCancel()</pre>

コルーチンのキャンセル

コルーチンをキャンセルするには、

cancel()

関数を呼び出すだけです。これにより、この context をリッスンしているすべてのコルーチンにキャンセル信号が送信されます。 <pre class='brush:go;toolbar:false;'>// 取消协程 cancel()</pre>

キャンセル信号をリッスンする

コルーチンは、

context.Done()

チャネルを使用してキャンセル信号をリッスンできます。チャネルが閉じられると、context がキャンセルされたことを示します。 <pre class='brush:go;toolbar:false;'>// 监听取消信号 select { case &lt;-ctx.Done(): // 处理取消 }</pre>

実際的なケース

HTTP

リクエストをタイムアウトさせる次のコルーチンを考えてみましょう: <pre class='brush:go;toolbar:false;'>func MakeRequest(ctx context.Context, url string) (*http.Response, error) { // 创建一个带有截止时间的context ctx, cancel := context.WithTimeout(ctx, 10*time.Second) defer cancel() // 发起HTTP请求 req, err := http.NewRequest(http.MethodGet, url, nil) if err != nil { return nil, err } req = req.WithContext(ctx) resp, err := http.DefaultClient.Do(req) if err != nil { return nil, err } return resp, nil }</pre>この例では:

    context.WithTimeout()
  • を使用して、10 秒の期限を持つ context を作成します。 リクエストはこの
  • context
  • に設定されており、基になるネットワーク呼び出しがタイムアウトしてリクエストをキャンセルできるようになります。
  • defer cancel()
  • 関数の終了時に context がキャンセルされて、他のコルーチンがブロックされないようにします。
context

を使用すると、コルーチンの実行を制御し、リソース リークや不要な待機を回避できます。

以上がGolang 関数の同時プログラミングにおけるコンテキストの役割の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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