きの検出にどのように多くのスレッド数はgoroutinesます創作を行うのでしょうか。

StackOverflow https://stackoverflow.com/questions/1714136

  •  19-09-2019
  •  | 
  •  

質問

私は理解していgoroutinesは多重化を複数のOSのスレッドなので、一ブロックなどを待っているI/O、その他ます。が、本当にありがとうか事前にどのように多くのスレッドが思産卵場をgoroutines?

例えば、我々は以下の機能をいかし多くが(または最大数)システムスレッドが作成されたn goroutines:

type Vector []float64

// Apply the operation to n elements of v starting at i.
func (v Vector) DoSome(i, n int, u Vector, c chan int) {
    for ; i < n; i++ {
        v[i] += u.Op(v[i])
    }
    c <- 1;    // signal that this piece is done
}
役に立ちましたか?

解決

Pike's Go Course PDF Slides(3日目)によると:

...ユーザーレベルの並列処理が必要な場合は、設定する必要があります $GOMAXPROCS または電話してください runtime.GOMAXPROCS(n). GOMAXPROCS ランタイムスケジューラに、一度に実行する非シススコールブロックされたゴルチンの数を伝えます。

に基づく このブログ投稿, また、環境変数を設定するように思われます GOMAXPROCS スレッドの数を修正できます。ただし、この値を指定しない場合、ランタイムが管理するスレッドのデフォルト数を取得する方法がわかりません。

このブログ投稿 環境変数を設定しない場合、ランタイムは1つのコアのみを使用していることを示唆しているようです(おそらく1つのプロセスのみを使用しているためです)。

他のヒント

各goroutine利用できるので、最大のスレッドです。るかどうかを使用するスレッドは何もしています。の値GOMAXPROCS判断したスレッドの数が使用できる自走行コード、つまり最大レベルの平行度.

しかしよりスレッドが使用できますが、でもGOMAXPROCS=1の場合goroutinesブロックを直接システム呼び出しまたは通話へC.

以下の操作を行い ない の原因となりgoroutine用スレッドがブロック:

  • チャンネル事業
  • ネットワーク事業
  • すべてのプリミティブの 同期 パッケージ

このように、例えば、とてくださgoroutinesる/dev/ttyxxブロック読み込み時に使用するスレッド。じんexecingの負荷プロセスを待って終了します。

現在、GCCGOはGoroutineごとに1つのスレッドを作成します。

6Gについては知りません。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top