ホームページ >バックエンド開発 >Golang >Go プログラムのメイン Goroutine が途中で終了するのを防ぐにはどうすればよいですか?

Go プログラムのメイン Goroutine が途中で終了するのを防ぐにはどうすればよいですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-12-13 18:29:10151ブラウズ

How Do I Prevent the Main Goroutine in a Go Program from Terminating Prematurely?

Go プログラムにおけるメイン ゴルーチンの永続化

Go プログラムのメイン ゴルーチンが途中で終了するのをどのように防ぐかという問題に遭遇するかもしれません。言い換えれば、目標は、明示的なユーザー介入を除いて、プログラムを無期限に実行し続けることです。

メインのゴルーチンを「スリープ」させる

いくつかの方法があります。メインのゴルーチンは CPU リソースを消費せずに永遠に待機します:

  • 空の選択ステートメント:

    select {}
  • 初期化されていないチャネルからの受信:

    <-make(chan int)
  • nil チャネルからの受信:

    <-(chan int)(nil)
  • に送信しますnil チャネル:

    (chan int)(nil) <- 0
  • ロックされた同期をロックしています。Mutex:

    mu := sync.Mutex{}
    mu.Lock()
    mu.Lock()

プログラムの終了

プログラムを終了するメカニズムが必要な場合は、単純なチャネル

var quit = make(chan struct{})

func main() {
    // Startup code...

    // Blocking (waiting for quit signal):
    <-quit
}

// Quitting in another goroutine:
close(quit)

ブロックせずにスリープする

メインの goroutine をブロックせずにプログラムを実行し続ける別のアプローチは、長いスリープ期間を使用することです。

time.Sleep(time.Duration(1<<63 - 1))

非常に長時間実行されるプログラムの場合、このようなスリープ ステートメントのループが発生する可能性があります。雇用者:

for {
    time.Sleep(time.Duration(1<<63 - 1))
}

以上がGo プログラムのメイン Goroutine が途中で終了するのを防ぐにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。