Golang におけるゴルーチンとチャネルのタイムアウトとキャンセルのメカニズム
Golang では、ゴルーチンとチャネルは同時プログラミングの重要なコンポーネントです。ゴルーチンは、複数のタスクを同時に簡単に実行できるようにする Go 言語の軽量スレッドの実装です。チャネルはゴルーチン間の通信メカニズムであり、データの転送とタスクの同期に使用されます。
実際の並行プログラミングでは、ゴルーチンの実行時間を制御したり、特定の条件下でゴルーチンの実行をキャンセルしたりする必要がある場合があります。これらの機能を実現するために、Golang はタイムアウトとキャンセルのメカニズムを提供します。以下では、Golang でこれらのメカニズムを使用する方法と、対応するコード例を詳しく紹介します。
- Goroutines のタイムアウト機構
Goroutines のタイムアウト機構は、指定された時間内にタスクが実行されることを保証します。指定された時間を経過してもタスクが完了しない場合、タイムアウトによりタスクはキャンセルされます。 Golang は、この関数を実装するための context
パッケージを提供します。以下は、Goroutines タイムアウト メカニズムを使用するサンプル コードです。
package main import ( "context" "fmt" "time" ) func worker(ctx context.Context) { for { select { case <-ctx.Done(): fmt.Println("任务被取消,退出 Goroutine") return default: fmt.Println("正在执行任务...") time.Sleep(1 * time.Second) } } } func main() { ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second) defer cancel() go worker(ctx) time.Sleep(10 * time.Second) }
上記のコードでは、context.WithTimeout
関数を使用して、5 秒のタイムアウトを持つコンテキスト オブジェクトを作成します。 go worker(ctx)
を呼び出して、Goroutine 実行タスクを開始します。タスクの実行中、select
ステートメントを通じて ctx.Done()
チャネルをリッスンし、キャンセル信号を受信した場合はゴルーチンを終了します。
main
関数では、time.Sleep(10 * time.Second)
を通じて 10 秒の待機を設定していることに注意してください。これは、Goroutine が確実に実行されるようにするためです。実行がタイムアウトになりました。上記のコードを実行すると、5 秒のタイムアウトに達した後、worker
Goroutine がキャンセル シグナルを受信して終了することがわかります。
- Goroutine のキャンセル メカニズム
Goroutine のキャンセル メカニズムは、特定の条件下で実行中のタスクをキャンセルできます。 context
パッケージを使用してこの機能を実現することもできます。次のコード例を見てください。
package main import ( "context" "fmt" "time" ) func worker(ctx context.Context) { for { select { case <-ctx.Done(): fmt.Println("任务被取消,退出 Goroutine") return default: fmt.Println("正在执行任务...") time.Sleep(1 * time.Second) } } } func main() { ctx, cancel := context.WithCancel(context.Background()) defer cancel() go worker(ctx) time.Sleep(5 * time.Second) cancel() fmt.Println("取消任务...") time.Sleep(2 * time.Second) }
上記のコードでは、context.WithCancel
関数を使用してキャンセル コンテキスト オブジェクトを作成し、go worker(ctx)## を呼び出します。 # Goroutine 実行タスクを開始しました。タスクの実行中、
select ステートメントを通じて
ctx.Done() チャネルをリッスンし、キャンセル信号を受信した場合はゴルーチンを終了します。
main 関数では、
time.Sleep(5 * time.Second) を通じて 5 秒の待機を設定し、
cancel() を呼び出します。 タスクをキャンセルします。上記のコードを実行すると、
cancel() を呼び出した後、
worker Goroutine がすぐにキャンセル信号を受信して終了することがわかります。
context パッケージを使用すると、タスクのタイムアウトおよびキャンセル操作を実装して、同時タスクの実行をより適切に制御できます。これは実際の並行プログラミングで非常に役立ち、タスクの正しい実行とリソースの解放を保証できます。
以上がGolang のゴルーチンとチャネルのタイムアウトとキャンセルのメカニズムの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

効果的なGOアプリケーションエラーログには、詳細とパフォーマンスのバランスをとる必要があります。 1)標準のログパッケージの使用は簡単ですが、コンテキストがありません。 2)Logrusは、構造化されたログとカスタムフィールドを提供します。 3)Zapはパフォーマンスと構造化されたログを組み合わせますが、より多くの設定が必要です。完全なエラーロギングシステムには、エラー濃縮、ログレベル、集中ロギング、パフォーマンスの考慮事項、エラー処理モードを含める必要があります。

emptyinterfacessoareinterfaceswithnometods、andingningundatatypes.1)asseeninthefmtpackage.2)usetheemcautiallydueTopoterisosofteTyaNDETYETYANDPERETINGISSUSES.2)

go'sconcurrencyModelisuniquedueToitsueToitsutinesAndChannels、sublicationalightweight andefcient andparedtototototheded based basedinlanguageslikejava、python、andrust.1)

go'sconcurrencymodelusesesgoroutinesandchannelstomeconconconconconconconconconconconconming effectivilly.1)GoroutinesArelightweightThreadSthatalloweasyparelizationoftasks.2)Channelsfacilateatesafedataexchangengengengengengedines、crucialforsynchruniz

インターフェースアンドポリマスを導入することは、codeReusablivedainability.1)defineinterfacesattherightabstractionlevel.2)useinterfacesfordependencyinjection.3)profilecodetAnageperformanceImpacts。

initistingorunsoutomativiviseativeatializepackages andsetuptheenvironment.it'susefulforstingupglobalvariables、resources、およびperformingone-tastasksacrossanypackage.hoer'showitworks:1)Itcanbeusedinpackage、not not-justhe、

インターフェイスの組み合わせは、関数を小さな焦点を絞ったインターフェイスに分解することにより、GOプログラミングで複雑な抽象化を構築します。 1)リーダー、ライター、およびより近いインターフェイスを定義します。 2)これらのインターフェイスを組み合わせて、ファイルやネットワークストリームなどの複雑なタイプを作成します。 3)ProcessData関数を使用して、これらの組み合わせインターフェイスを処理する方法を示します。このアプローチはコードの柔軟性、テスト可能性、再利用性を高めますが、過度の断片化と組み合わせの複雑さを避けるために注意する必要があります。

intionsingoareautomativitiveedemain foreThemain foreThemaindareusefurfurforseTup butChallenges.1)実行命令:rundistionsrunindediontionOrder.2)テスト:テスト:in functionsMayInterwithests、b


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

DVWA
Damn Vulnerable Web App (DVWA) は、非常に脆弱な PHP/MySQL Web アプリケーションです。その主な目的は、セキュリティ専門家が法的環境でスキルとツールをテストするのに役立ち、Web 開発者が Web アプリケーションを保護するプロセスをより深く理解できるようにし、教師/生徒が教室環境で Web アプリケーションを教え/学習できるようにすることです。安全。 DVWA の目標は、シンプルでわかりやすいインターフェイスを通じて、さまざまな難易度で最も一般的な Web 脆弱性のいくつかを実践することです。このソフトウェアは、

VSCode Windows 64 ビットのダウンロード
Microsoft によって発売された無料で強力な IDE エディター

SublimeText3 中国語版
中国語版、とても使いやすい

SecLists
SecLists は、セキュリティ テスターの究極の相棒です。これは、セキュリティ評価中に頻繁に使用されるさまざまな種類のリストを 1 か所にまとめたものです。 SecLists は、セキュリティ テスターが必要とする可能性のあるすべてのリストを便利に提供することで、セキュリティ テストをより効率的かつ生産的にするのに役立ちます。リストの種類には、ユーザー名、パスワード、URL、ファジング ペイロード、機密データ パターン、Web シェルなどが含まれます。テスターはこのリポジトリを新しいテスト マシンにプルするだけで、必要なあらゆる種類のリストにアクセスできるようになります。

mPDF
mPDF は、UTF-8 でエンコードされた HTML から PDF ファイルを生成できる PHP ライブラリです。オリジナルの作者である Ian Back は、Web サイトから「オンザフライ」で PDF ファイルを出力し、さまざまな言語を処理するために mPDF を作成しました。 HTML2FPDF などのオリジナルのスクリプトよりも遅く、Unicode フォントを使用すると生成されるファイルが大きくなりますが、CSS スタイルなどをサポートし、多くの機能強化が施されています。 RTL (アラビア語とヘブライ語) や CJK (中国語、日本語、韓国語) を含むほぼすべての言語をサポートします。ネストされたブロックレベル要素 (P、DIV など) をサポートします。

ホットトピック









