Go スケジューラはいつ新しい M と P を作成しますか?

王林
リリース: 2024-02-06 09:00:09
転載
867 人が閲覧しました

Go スケジューラはいつ新しい M と P を作成しますか?

質問内容

golang GMP モデルを学習したところ、ゴルーチン、オペレーティング システムのスレッド、golang コンテキスト/プロセッサがどのように連携するのか理解できました。しかし、MとPがいつ生成されるのかはまだわかりません。

たとえば、データベース上でいくつかの操作を実行するテスト コードがあり、2 つのテスト ケース (ゴルーチンの 2 つのバッチ) があります。

リーリー

私の理解では、M は必要なときに作成されます。ゴルーチンの最初のバッチでは、8 (マシン上の仮想コアの数) のオペレーティング システム スレッドが作成されます。2 番目のバッチでは、新しいスレッドを作成せずに、これらの 8 つのオペレーティング システム スレッドのみが再利用されます。これは正しいです?

このトピックに関するその他の資料やブログを提供していただければ幸いです。


正解


M は、プロセスがブロックされていない場合、またはシステム コールを行わない場合にのみ再利用できます。あなたの場合、go func() にブロックタスクがあります。したがって、M の数は 8 (私のマシン上の仮想コアの数) に制限されません。最初のバッチはブロックして P から削除し、P に関連付けられた新しい M が作成される間、ブロック プロセスが完了するのを待ちます。

詳細については以下を参照してください。

以上がGo スケジューラはいつ新しい M と P を作成しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:stackoverflow.com
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート