go-goroutineコルーチンとマルチコアスケジューリング


タイトル:go-goroutineコルーチンおよびマルチコアスケジューリング
カテゴリ:Go
タグ:[go、goroutine、coroutine、scheduling]
日付:2020-11-21 14:25:12
コメント:false
mathjax:true
toc:true

go-goroutineコルーチンとマルチコアスケジューリング


前日譚

  • 1万語の長い記事で、Golangランタイムの進化、スケジューリング、メモリ、および実践について簡単に説明しています-https://www.toutiao.com/i6855166544079487492/
  • Golangのコルーチンスケジューラの原則とGMP設計のアイデア?-https://www.toutiao.com/i6797580089891488259/

func()スケジューリングプロセスに移動します


golangマルチコアスケジューリングとgoroutineコルーチン

参照:

  • golangマルチコアプログラミングについて少し理解している-https://studygolang.com/articles/9686
  • Go言語でのマルチコアスケジューリング-https://blog.csdn.net/InsZVA/article/details/54081605
  • GolangのコルーチンスケジューリングメカニズムとGOMAXPROCSパフォーマンスチューニング-https://juejin.im/post/5b7678f451882533110e8948
  • Golangのコルーチンスケジューラの原則とGMP設計のアイデア-https://www.toutiao.com/i6797580089891488259/

GOMAXPROCS

Go言語ランタイム(実行時)の小さなタスクスケジューラを実装しています。このスケジューラの動作原理は、オペレーティングシステムのスケジューリングスレッドに似ています。Goプログラムスケジューラは、CPUリソースを各タスクに効率的に割り当てることができます。従来のロジックでは、開発者はスレッドプール内のスレッド数とCPUコア数の間の対応する関係を維持する必要があります。同様に、Goはruntime.GOMAXPROCS()関数でも実行できます。形式は次のとおりです。

runtime.GOMAXPROCS(論理CPUの数)

ここでの論理CPUの数は、次の値を持つことができます。

  • <1:値を変更しないでください。
  • = 1:シングルコア実行。
  • > 1:マルチコア同時実行。

一般に、runtime.NumCPU()を使用してCPUの数を照会し、runtime.GOMAXPROCS()関数を使用して次のように設定できます。

runtime.GOMAXPROCS(runtime.NumCPU())

Go 1.5より前は、デフォルトでシングルコア実行が使用されていました。Go 1.5以降、コードを同時に実行できるようにし、CPUを最も効率的に使用するために、上記のステートメントがデフォルトで実行されます。

GOMAXPROCSは同時に環境変数でもあり、アプリケーションの起動前に環境変数を設定することも同じ役割を果たすことができます。


つかむ

  • プリエンプション:コルーチンでは、コルーチンがCPUを放棄するのを待ってから、次のコルーチンを実行する必要があります。Goでは、他のコルーチンが飢えて死ぬのを防ぐために、ゴルーチンが最大10msのCPUを占有します。これがゴルーチンの違いです。コルーチンから。-https://www.toutiao.com/i6797580089891488259/

ゴルーチンコルーチン

関連情報
  • 1万語の長い記事で、Golangランタイムの進化、スケジューリング、メモリ、および実践について簡単に説明しています-https://www.toutiao.com/i6855166544079487492/

コルーチンを切り替える
  • ユーザーコードのコルーチンは、スレッドをブロックせずにコルーチンを切り替えるだけで発生するブロックを理解します。-https://www.toutiao.com/i6855166544079487492/

おすすめ

転載: blog.csdn.net/yangxuan0261/article/details/110238712