time.Sleep はゴルーチンをブロックしますか?
Go では、一般的な誤解として、time.Sleep がゴルーチンをブロックするため、過剰なゴルーチンが発生するという懸念が生じます。スレッドの作成。
Go についてスケジューラー
Go は、複数プロデューサー、単一コンシューマー (MPG) スケジューラーを使用します。このスケジューラーでは、M と呼ばれる限られた数のスレッドが、P (ワーカー ゴルーチン) によってサービスされるキューからのジョブを共有します。 M がアイドル状態になると、キューからジョブを取得して実行します。
Does time.Sleep Really Block Goroutines?
はい、time.Sleep はゴルーチンをブロックしますスリープ期間中に現在の goroutine がさらに実行されるのを防ぐという意味です。
理由time.Sleep 使用時のスレッド作成の制限?
time.Sleep のブロック特性にもかかわらず、Go スケジューラは次の 2 つの理由により新しいスレッドを生成しない場合があります:
例間のスレッド作成の違い
最初の例、ゴルーチンは長時間スリープしますスケジューラはスリープ期間中に追加の処理が必要ないと判断できるため、固定数のスレッドを使用します。対照的に、同時 IO 操作を伴う 2 番目の例では、各ゴルーチンが IO タスクを積極的に実行するため、より多くのスレッドが必要になります。
スレッドの作成を心配する場合
一般的に、 Go のスケジューラはスレッドの作成を効率的に処理します。ただし、ほとんどの時間を I/O 操作のブロックに費やす過剰な数の goroutine を意図的に作成する場合など、まれに、過剰なスレッド作成による問題が発生することがあります。
以上が「time.Sleep」は本当にゴルーチンをブロックしますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。