2017-01-28 3 views

答えて

4

How goroutines work」を参照してください。

  • メモリ消費量:
    彼らはで安くなってい
    スレッドが数KBとは対照的に、大容量メモリで始まります。
  • セットアップとティアダウンコスト
    (あなたがスレッドのプールを維持する必要が理由である)
  • スイッチングコスト
    スレッドはプリエンプティブにスケジュール設定、およびスレッドの切り替え時に、スケジューラは、すべてのレジスタを保存/復元する必要がありますされています。
    ランタイムは、作成からスケジューリングまでの間、ゴルーチンを管理します。また、保存するレジスタの数も少なくなります。

プラス、「Go’s march to low-latency GC」で述べたように、GCは、ランタイムがゴルーチンの管理を担当しているとき、実装が簡単である:

ゴー1.5での同時GCの導入以来、ランタイムスタックが最後にスキャンされてからゴルーチンが実行されたかどうかを追跡しています。マーク終了段階では、各ゴルーチンが最近実行されたかどうかを確認し、いくつかの再スキャンを行います。

Go 1.7では、実行時にこのようなゴルーチンの別の短いリストが保持されます。これにより、ユーザコードが一時停止している間にゴルーチンのリスト全体を調べる必要がなくなり、カーネルのNUMA関連メモリ移行コードをトリガできるメモリアクセス数が大幅に削減されます。

関連する問題