ホームページ > バックエンド開発 > Golang > タイムアウト後に Go Goroutine を完了前に停止するにはどうすればよいですか?

タイムアウト後に Go Goroutine を完了前に停止するにはどうすればよいですか?

Susan Sarandon
リリース: 2024-12-30 12:22:09
オリジナル
516 人が閲覧しました

How Can I Stop a Go Goroutine Before Its Completion After a Timeout?

タイムアウト時にゴルーチンの実行を停止: フォークジョイン モデルの制限

Go のフォークジョイン同時実行モデルでは、ゴルーチンの実行を一度中断することはできません開始されました。チャネルからの読み取りにタイムアウトを設定できますが、チャネルへのゴルーチンの書き込みの実行は停止しません。

例の説明

提供されたコード内:

  • Find 関数はバッファリングされたチャネルを作成し、ゴルーチンを起動して応答を送信します。 10 秒。
  • select ステートメントには、チャネルから受信する場合と、50 ミリ秒後にタイムアウトする場合の 2 つのケースがあります。
  • ゴルーチンは、タイムアウト後も最終的に応答を送信するため、目的の出力が得られません。

を理解する制限事項

ゴルーチンを中断できないのは、Go のフォーク結合モデルに起因します。

  • ゴルーチンはメインスレッドからフォークされ、直接制御せずに同時に実行されます。
  • チャネル通信などの結合ポイントは、同期が行われる唯一のインスタンスです
  • チャネル受信側に設定されたタイムアウトは、送信側ゴルーチンの実行には影響しません。

代替アプローチ

直接割り込みは不可能ですが、別のアプローチが考えられます採用:

  • コンテキストのキャンセル: コンテキストをゴルーチンに関連付け、タイムアウト時にそれをキャンセルし、ゴルーチンがシグナルを受信して​​終了します。
  • 別のプロセス: 別のプロセスでゴルーチンを開始し、次の場合は終了します。必要です。

以上がタイムアウト後に Go Goroutine を完了前に停止するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート