ホームページ  >  記事  >  バックエンド開発  >  Golang で高い同時実行性を実現するにはどうすればよいですか?

Golang で高い同時実行性を実現するにはどうすればよいですか?

coldplay.xixi
coldplay.xixiオリジナル
2020-07-18 16:05:287162ブラウズ

Golang の高い同時実行性を実現する方法: まず、M はカーネル スレッドに関連付けられ、スケジューラ P のスケジューリングを通じて 1 つ以上の G に接続され、次に、間の 1 対 1 の関係に基づいて、M がカーネル スレッドに関連付けられます。 M と P、P スケジュール N 個の G を介して、最終的にカーネル スレッドと G の間の多対多の関係 [M:N] が実現します。

Golang で高い同時実行性を実現するにはどうすればよいですか?

#高い同時実行性を実現する golang の方法:

#go 言語は MPG モードを使用して CSP

## を実装します

#推奨ビデオ コース →:

「数千万のデータに対する同時実行ソリューション (理論と実践)」

には多くのことが含まれています従来の同時実行性では解決できません スレッドは CPU とメモリのオーバーヘッドを増加させるだけであり、スレッドが多すぎると大量のコンピュータ ハードウェア リソースが消費され、同時実行性のボトルネックが発生します。

  • MM

    はマシンを指し、M はカーネル スレッドに直接関連付けられます。

  • P

    は「プロセッサ」を指します。これは、M に必要なコンテキスト環境を表し、ユーザーレベルのコード ロジックを処理するプロセッサでもあります。

  • #G

    は Goroutine を指します。これは実際には軽量のスレッドです。

Golang で高い同時実行性を実現するにはどうすればよいですか?私の個人的な理解: M はカーネル スレッドに関連付けられており、スケジューラ P (コンテキスト) のスケジューリングを通じて、1 つ以上のスレッドに接続できます。 G は、カーネル スレッドを N 個のユーザー スレッドに分割することに相当します。M と P は 1 対 1 の関係を持ちます (ただし、実際のスケジューリングでは関係は変わります)。N 個の G は P を通じてスケジュールされます (P と G は 1 対 1 の関係を持ちます)。このようにして、1 つのカーネル スレッドは N 個のゴルーチンを開始でき、同じマシンで使用できるユーザー スレッドの数はハードウェア構成が幾何級数的に増加し、同時実行性が大幅に向上します。

関連する学習に関する推奨事項:
Go 言語チュートリアル

以上がGolang で高い同時実行性を実現するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。