ゴルーチンスケジューリングアルゴリズム

言語ゴーの利用が始まって以来、今しかし、一年以上堪能するだけでなく、小さいと考え理解する必要がありませんがあります。ここでは私の経験のシンプルなレコードが(実際には、他人の経験から学びます)

ゴルーチン、囲碁言語CPUの最小単位は、同様のLUA Ctripので実行されているが、それは別の方法で呼び出すとスケジューリングされていますが、ゴー・ランタイムはこれらのゴルーチンが、大小のスケジュールする方法で、はっきり「仕事」はそれを手配します、これは私たちの章です内容を説明します。

 

三つの成分、すなわち、M(マシン)、P(プロセッサ)、G(Goroutinue)を提示するために、それらの定義および構造は、ソース言語ゴー(runtime.h)中に見ることができます

  • M(マシン)カーネルレベルのスレッド、スレッドMは実数を表し、すべてのタスクがMで実行されている、データ構造は、P、現在の実行コンテキストとG情報キャッシュメモリカウンタの現在の管理を維持します以下のように...
  • P(プロセッサ)プロセッサ、主な目的はgoroutinueを管理し、実行することで、データ構造は、リストgoroutinueを維持し、G情報が現在実行。Pは、より以下の実装と管理のためのツールのようなものです、我々は彼らの関係についてお話します、M役割とM Pの感触に非常に似ているが、実際に本物のパフォーマーであり、ここを参照してください。
  • G(ゴルーチン)チェンの最小単位、タスク、記録コンテキスト情報自体のデータ構造

これらの3つのコンポーネントがスケジューリングアルゴリズム、スケジューリングによってプロセス全体にとって非常に重要な3つの管理(ここでは絵、私が書きたいが、この章のパワー、キュートで特定のイメージです)

 

 ハムスター(M)搬送車(P)及び処理れんが(G)

実際には、スケジューリングが概念を理解があった場合、あなたが基本的な考え方を持っている必要があり、聞かせてのは、さらに詳細を見ます

1、プログラムを起動する(コンパイラの理論は、操作、スケジューリング処理紙話Go]を説明していません)

 実行可能ファイルを実行し、直接ではなく、メイン関数の実装に、しかしスケジューリング初期ランタイムモジュール、及びGが行く言語の実行単位であるように、メイン関数Gの最初の実装を作成した後、すべてGoroutinueとして実行するようにされていますキャリアは、CPU上で実行されます。それは、どのように彼らは準備ができて処理し、それから抜け出すことができ、Goroutinueを実行するには、P / Mに依存しなければならない場合、または単にターンで前に言いましたか?そこでここでは、実行時の初期化処理を見て(barabaraを、パラメータ、OS、ハッシュの初期化が含まれている)、この記事ではとても良い数のプロセスを確立し、コアユーザーのCPUの数に基づいて、その後、直接最初にされたスケジューラ初期化プロセスを見て、スケジューリングに焦点を当ててグローバルでのキューG(Zhuandui)に投げ込ま。

だから、また、単に、究極の演奏を言ったり、main関数が実行される前に、プログラムが起動した後、ドラッジするハムスター(M、CPU)を依存している、それは最初のM(SYSMONの監視システム、悪の資本家)を作成しますスケジューリング囲碁言語、GCメカニズムをブロック、スケジューリングアルゴリズムは、Mから不可分です

SYSMONは、現在、Mが(Mは、十分ではありません空きがあるとP Gがある)募集ハムスター(M)を(作成)されます動作しないことが判明し、車(P)のレンガ(G)へのバインドがありますここで、関係のM / P / Gは、実行中のM P Gにこの時点で縁部から開始して、構築されます。たびに、私たちはコードを実行し、キューに追加された新しいグローバルgoroutinueを作成し、FUNC行きます。

2、スケジューリングアルゴリズム

なぜそこスケジューリング、並行処理は、レンガのホリネズミがジョブを終了した場合、当然のことながら、取る、あるいはない、他に行くことが、グローバル・キュー(Zhuandui)には止めることができないことを、ますます高いリソース使用率にあるされていますホリネズミドライレンガのグラブの小さな車は(ゴーファーは、オペレータのパフォーマンスであること、やって独立したタスクを行ってきました、ここで見ることができます)。両方がない場合は、何回かしてみてください、あなたは資源のない消費、スリープ(サスペンド)に行くことを選択します。ゴーは、上記の、ハードレンガが常にある、もちろん、プログラムはすべてがとても自然であることは不可能ではないことができ、実際にあなたが呼ぶとき、それは待機状態になりますゴルーチン主流スケジューリングアルゴリズム(チャネル動作、IO閉塞)ドロスされていますこのようホリネズミが実行されるのを待って、再加入キューへの準備ができて、ゴルーチンイベントコールバックのトリガーを待った後、乾燥の後のライブ行きます;システムコールが必要な場合は、その後、ハムスター(M)は、次のために待たなければなりません現在の車(P)は、ハムスター(M)店を再作成し、SYSMONの残りの部分で生きて行く、解ハムスター(M)で結ばれます。スケジューリングアルゴリズムのこのセットは、作業スチールと呼ばれ、このスケジューリングアルゴリズムは現在、多くの場合、大規模なシステムで使用されています。

 

3、プリエンプティブスケジューリング

ゴルーチンがループ保持とし、Gのそれぞれの実行時間を設定ゴー言語根拠のないタイムスライシングモード、ので、彼は永遠に循環してきたのでしょうか?もちろん、SYSMONの冒頭で言っていないが具体的にとげを取得するために設計された、複数のモニタの後に、それは、現在のGは、レディキューに強制的に、マウス(M)の手からそれを引き継ぐれ、フットプリントを保ったことがわかりましたそう誰もわずかなものを得ることはできません。

 この記事では、オペレーティングシステムの詳細の一部が含まスケジュール概要、ゴルーチン何の単純な記録(Gコンテキストの復元、プリエンプティブスケジューリングを、非同期ブロック)ここXiangjieではないです。興味手順人民元を約学ぶために自分で関連情報を見つけることができます

おすすめ

転載: www.cnblogs.com/novice-dxx/p/11822297.html
おすすめ