runtime.Gosched: 協調マルチタスクの制御を譲る
Go では、 runtime.Gosched 関数は現在のゴルーチンの制御を明示的に放棄し、スケジューラを使用して実行を別のゴルーチンに切り替えます。このメカニズムは Go のランタイムで採用されている協調的なマルチタスクにとって重要であり、ゴルーチンが OS レベルのスレッド プリエンプションに依存せずに CPU 時間を共有できるようになります。
次のコード スニペットを考えてみましょう。
package main import ( "fmt" "runtime" ) func say(s string) { for i := 0; i <p>Inこの例では、2 つのゴルーチンが作成されます。メインのゴルーチンと、「world」の出力を担当する 2 番目のゴルーチンです。 runtime.Gosched() を使用しない場合、メインの goroutine は他の goroutine に制御を譲ることなく継続的に実行され、次のような出力が得られます。</p><pre class="brush:php;toolbar:false">hello hello hello hello hello
ただし、runtime.Gosched() を使用すると、スケジューラーは 2 つの goroutine の間で実行を切り替えます。各反復でゴルーチンを実行し、インターリーブされた出力を生成します:
hello world hello world hello world hello world hello
理由runtime.Gosched() は実行に影響します
runtime.Gosched() が呼び出されると、次のことが発生します:
- 現在の goroutine は実行を一時停止します。
- スケジューラは、スケジューリング アルゴリズムとシステムに基づいて、次にどのゴルーチンが実行されるようにスケジュールされているかを評価します。
- 次にスケジュールされた goroutine が実行を再開します。
協調的なマルチタスクは、runtime.Gosched() などのメカニズムやチャネルなどの同時実行プリミティブを使用して制御を明示的に譲り渡すゴルーチンに依存します。対照的に、最新のオペレーティング システムで採用されているプリエンプティブ マルチタスクでは、ゴルーチンが関与することなく、スレッド間で実行コンテキストを透過的に切り替えます。
GOMAXPROCS と実行
GOMAXPROCS 環境変数Go ランタイムが goroutine の実行に使用できる OS スレッドの最大数を制御します。 GOMAXPROCS が 0 (デフォルト) または 1 に設定されている場合、ランタイムは単一のスレッドを使用します。このシナリオでは、ゴルーチンが連携して CPU 時間を共有するために runtime.Gosched() が不可欠になります。
GOMAXPROCS が 1 より大きい値に設定されている場合、ランタイムは複数の OS スレッドを作成できます。この場合、ゴルーチンは異なるスレッドで同時に実行できるため、明示的に譲歩する必要性が減ります。その結果、runtime.Gosched() が実行に与える影響は少なくなる可能性があります。
以上が`runtime.Gosched()` は Go での Goroutine の実行にどのような影響を与えますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

記事では、GOのマップを介して反復し、安全なプラクティスに焦点を当て、エントリを変更し、大規模なマップのパフォーマンスに関する考慮事項に焦点を当てています。

この記事では、GOの配列とスライスの違いについて説明し、サイズ、メモリの割り当て、機能の合格、および使用シナリオに焦点を当てています。アレイは固定サイズで、スタックに挿入されていますが、スライスは動的で、しばしばヒープアロークされ、より柔軟です。

この記事では、リテラル、メイク機能、既存のアレイまたはスライスのスライスなど、GOのスライスの作成と初期化について説明します。また、スライスの構文とスライスの長さと容量の決定もカバーします。

この記事では、GOの配列を作成および初期化する方法について説明し、配列とスライスの違いについて説明し、配列の最大サイズの制限に対処します。配列対スライス:固定対動的、値と参照タイプ。

記事では、フィールドの命名ルールや構造体の埋め込みなど、GOの構造体の構文と初期化について説明します。主な問題:GOプログラミングで構造体を効果的に使用する方法(文字:159)

この記事では、GOのポインターの作成と使用を説明し、効率的なメモリ使用や安全な管理慣行などの利点について議論しています。主な問題:安全なポインターの使用。

この記事では、Software開発にGo(Golang)を使用することの利点について説明し、その並行性サポート、高速編集、シンプルさ、およびスケーラビリティの利点に焦点を当てています。恩恵を受ける主要な業界には、テクノロジー、金融、ゲームが含まれます。


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

EditPlus 中国語クラック版
サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません

メモ帳++7.3.1
使いやすく無料のコードエディター

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

AtomエディタMac版ダウンロード
最も人気のあるオープンソースエディター

ホットトピック









