Go の CSP 同時実行モデル
Go は 2 つの形式の同時実行を実装しています。 1 つ目は一般に誰もが認識している、マルチスレッド共有メモリです。実はJavaやCといった言語でのマルチスレッド開発です。
もう 1 つは Go 言語に固有で、Go 言語によって推奨されている、CSP (順次プロセスの通信) 同時実行モデルです。 (推奨学習: go)
CSP 同時実行モデルは、1970 年頃に提案された概念です。これは比較的新しい概念であり、共有メモリを介して通信する従来のマルチスレッドとは異なります。 , CSPは「通信による記憶の共有」に重点を置いています。
次の文を覚えておいてください:
Do not communicate by sharing memory; instead, share memory by communicating. “不要以共享内存的方式来通信,相反,要通过通信来共享内存。”
通常のスレッド同時実行モデルは、Java、C、または Python のようなもので、スレッド間の通信は共有メモリ メソッドを介して行われます。
非常に一般的な方法は、ロックを介して共有データ (配列、マップ、構造体やオブジェクトなど) にアクセスすることです。したがって、多くの場合、便利な操作が得られます。データ構造は次のように呼ばれます。 「スレッドセーフなデータ構造」。
例えば、Javaが提供するパッケージ「java.util.concurrent」内のデータ構造。従来のスレッド同時実行モデルも Go に実装されています。
Go の CSP 同時実行モデルは、ゴルーチンとチャネルを通じて実装されます。
ゴルーチンは、Go 言語の同時実行ユニットです。少し抽象的ですが、実際には従来の概念の「糸」に似ており、「糸」として理解できます。
チャネルは、Go 言語の各同時構造 (ゴルーチン) の前にある通信メカニズムです。平たく言えば、これはさまざまなゴルーチン間の通信のための「パイプライン」であり、Linux のパイプに似ています。
ゴルーチンを生成する方法は非常に簡単です。Go を実行すると生成されます。
go f();
通信機構のチャネルも非常に便利で、データの送信にはチャネル <- データを使用し、データの取得には <-チャネルを使用します。
通信プロセスでは、データ送信チャネル <- データとデータ取得 <-チャネルが必然的にペアで表示されます。これは、2 つのゴルーチン間でのみ、送信と取得が行われるためです。通信を有効にします。
そして、渡されるか取得されるかに関係なく、別のゴルーチンが渡されるか取得されるまでブロックされます。
ゴルーチンは 2 つあり、そのうちの 1 つはチャネルへの値転送操作を開始します。 (ゴルーチンは長方形、チャネルは矢印)
以上がGolangで同時実行を行う方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。