Goroutine が実行前に終了してしまうのはなぜですか?

Barbara Streisand
リリース: 2024-10-30 10:59:02
オリジナル
942 人が閲覧しました

Why Is My Goroutine Terminating Before Execution?

ゴルーチンが実行されないのはなぜですか?

Go プログラミングの分野では、ゴルーチンは同時実行のための強力なメカニズムを提供します。ただし、これらの goroutine が応答していないように見える場合があり、開発者が混乱状態に陥ることがあります。

シナリオ:

goroutine を作成して送信しようとする次の Go コードについて考えてみましょう。チャネル経由のメッセージ:

<code class="go">package main
import "fmt"
func main(){

messages := make(chan string,3)

messages <- "one"
messages <- "two"
messages <- "three"

go func(m *chan string) {
    fmt.Println("Entering the goroutine...")
    for {
        fmt.Println(<- *m)
    }
}(&messages)

fmt.Println("Done!")
}</code>
ログイン後にコピー

このコードを実行すると、出力は驚くかもしれません:

Done!
ログイン後にコピー

問題:

にもかかわらずgoroutine を作成しても、コードはその中のステートメントを実行しません。理由はメインプログラムの終了にあります。 Go では、ゴルーチンは main 関数とは独立して実行されます。メイン プログラムが終了すると、実行する機会がなかった場合でも、実行中のゴルーチンはすべて終了します。

解決策:

ゴルーチンが途中で終了しないようにするには、ゴルーチンが作業を完了するまでメイン プログラムを存続させておく必要があります。これを実現するには、いくつかのアプローチがあります。

  • Channel: ゴルーチンからのメッセージを待機する 2 番目のチャネルを作成し、メッセージが受信されるまでメイン プログラムを効果的にブロックします。
  • 同期: sync.WaitGroup または同様の同期メカニズムを使用して、ゴルーチンがタスクを完了したときに通知します。
  • タイマー: タイマーを作成して、指定された期間待機し、ゴルーチンが実行するのに十分な時間を確保します。

推奨事項:

ゴルーチンの動作と並行性をより包括的に理解するにはGo、Golang ブログの優れたブログ投稿「Go の同時実行性」を読むことを強くお勧めします。

以上がGoroutine が実行前に終了してしまうのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!