Windows 上の非機能的なゴルーチンの謎を理解する
同時実行の領域では、ゴルーチンは Go の軽量スレッドとして機能します。ただし、一部のプログラマーは、Windows 上でゴルーチンの実行に失敗するという予期せぬ課題に遭遇しました。この謎を解明するために、根本的な問題を詳しく調べてみましょう。
根本原因: 非同期実行
従来のスレッドとは異なり、ゴルーチンは非同期で実行されます。つまり、プログラムは呼び出された関数が完了するのを待ちません。これにより効率的な同時実行が可能になりますが、ゴルーチンが実行される前に main 関数が終了すると問題が発生する可能性があります。
実行ギャップの克服
ゴルーチンが操作を完了するのに十分な時間を確保するには、プログラムの終了を遅らせるメカニズムを組み込むことが重要です。一般的なアプローチの 1 つは、指定された期間プログラムの実行を一時停止する「スリープ」ステートメントを導入することです。たとえば、次のコードはプログラムに 10 秒間の待機を強制し、ゴルーチンに出力を出力するのに十分な時間を与えます。
package main import ( "fmt" "time" ) func test() { fmt.Println("test") } func main() { go test() time.Sleep(10 * time.Second) }
Output:
test
この手法を使用すると、プログラムが goroutine の実行が完了するまで待機するようにすることで、期待される出力を観察できるようになります。
以上がWindows 上でゴルーチンの実行が時々失敗するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。