Windows 上の非機能的なゴルーチンの謎を理解する
同時実行の領域では、ゴルーチンは Go の軽量スレッドとして機能します。ただし、一部のプログラマーは、Windows 上でゴルーチンの実行に失敗するという予期せぬ課題に遭遇しました。この謎を解明するために、根本的な問題を詳しく調べてみましょう。
根本原因: 非同期実行
従来のスレッドとは異なり、ゴルーチンは非同期で実行されます。つまり、プログラムは呼び出された関数が完了するのを待ちません。これにより効率的な同時実行が可能になりますが、ゴルーチンが実行される前に main 関数が終了すると問題が発生する可能性があります。
実行ギャップの克服
Toゴルーチンが操作を完了するのに十分な時間を確保するには、プログラムの終了を遅らせるメカニズムを組み込むことが重要です。一般的なアプローチの 1 つは、指定された期間プログラムの実行を一時停止する「スリープ」ステートメントを導入することです。たとえば、次のコードはプログラムに 10 秒間の待機を強制し、ゴルーチンに出力を出力するための十分な時間を与えます:
package main import ( "fmt" "time" ) func test() { fmt.Println("test") } func main() { go test() time.Sleep(10 * time.Second) }
Output:
test
この手法を採用すると、プログラムは goroutine の実行が完了するまで待機するようになり、期待される出力を観察できるようになります。
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3