負荷テストでは、多数の HTTP 呼び出しがゴルーチンで調整され、次のようになります。これらのルーチンの実行時間を制御するために重要です。これにより、ユーザーは事前定義された時間に負荷テストを終了できます。
これを達成するための一般的な試みの 1 つは、ゴルーチンを使用して time.Sleep() の継続時間とブロードキャスト終了信号を監視することです。チャンネル経由で。特定のケースではこの方法で十分かもしれませんが、ゴルーチンがメインのゴルーチンの外で HTTP 呼び出しを実行し続ける場合は失敗します。
Go 1.7 では、この問題に対処するために必須のコンテキスト パッケージが導入されています。 。コンテキストは、ゴルーチンの実行をキャンセルおよび監視するための構造化された方法を提供し、時間ベースの終了のための信頼できるソリューションを提供します。
package main import ( "context" "fmt" "time" ) func test(ctx context.Context) { t := time.Now() select { case <-time.After(1 * time.Second): fmt.Println("overslept") case <-ctx.Done(): } fmt.Println("used:", time.Since(t)) } func main() { ctx, _ := context.WithTimeout(context.Background(), 50*time.Millisecond) test(ctx) }
説明:
このアプローチにより、次のことが保証されます。ゴルーチンは、コード内の位置に関係なく、指定された時間が経過するとキャンセルされます。
以上がコンテキストを使用して設定時間が経過した後にゴルーチンを正常に停止するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。