84669 人が学習中
152542 人が学習中
20005 人が学習中
5487 人が学習中
7821 人が学習中
359900 人が学習中
3350 人が学習中
180660 人が学習中
48569 人が学習中
18603 人が学習中
40936 人が学習中
1549 人が学習中
1183 人が学習中
32909 人が学習中
不要通过共享内存来通信,而应该通过通信来共享内存
这是一句风靡golang社区的经典语,对于刚接触并发编程的人,该如何理解这句话?
光阴似箭催人老,日月如移越少年。
https://blog.golang.org/share...
この記事では、共有メモリを使用する場合、マルチスレッド シナリオで競合状態を処理するために、共有メモリをロックする必要があることを明確に説明していますが、これは使用するのがより面倒です。さらに、ロックの使用が多すぎると、プログラムのコード ロジックが理解しにくくなり、デッドロックが発生した後、特にロックが多数存在する場合、問題のトラブルシューティングが非常に困難になります。同じ時間です。
go 言語のチャネルは、同時に 1 つの goroutine だけが内部のデータにアクセスできるようにし、開発者に洗練されたシンプルなツールを提供します。そのため、go のネイティブな方法は、共有メモリを使用する代わりにチャネルを使用して通信することです。通信する。
前者は誰もが状態を維持することを意味し、後者は誰もが状態のコピーを維持することを意味すると思います。
共有メモリでは、複数のスレッドが同時にデータにアクセスして変更する必要があり、データのセキュリティと可視性を確保するために、ロックが実行され、並列処理がシリアル化され、CPU もスレッドのロック取得でビジー状態になります。方法を変更して、各スレッドが独自にデータをコピーする方が、1 つのスレッドが 1 つの処理を完了する限り、他のスレッドがロックを取得する必要がなくなります。同時実行性を達成するためにスレッドを通知の形式で引き渡します。
実際、分散の観点から理解すると、より明確になります。
たとえば、2 つのプロセス ab が同じメッセージ キューを一緒に操作する場合、共有メモリが使用される場合、2 つのプロセスは同じ物理マシンに限定される必要があり、通信の意味は大幅に減少します。
設計時にメッセージ キューに読み取りと書き込みのインターフェイスのみが提供され、内部実装についてまったく心配する必要がない場合、メッセージ キューは共有メモリのように見えるでしょう。ただし、メッセージ キューはソケットを使用して通信できます。
つまり、上記の文、通信の実装に共有メモリを使用しないということは、最初からプログラムを単一のマシンに限定するのではなく、通信を使用する、つまり内部実装をカプセル化し、対応する処理を実行するためのインターフェイスを提供することを意味します。運営
https://blog.golang.org/share...
この記事では、共有メモリを使用する場合、マルチスレッド シナリオで競合状態を処理するために、共有メモリをロックする必要があることを明確に説明していますが、これは使用するのがより面倒です。さらに、ロックの使用が多すぎると、プログラムのコード ロジックが理解しにくくなり、デッドロックが発生した後、特にロックが多数存在する場合、問題のトラブルシューティングが非常に困難になります。同じ時間です。
go 言語のチャネルは、同時に 1 つの goroutine だけが内部のデータにアクセスできるようにし、開発者に洗練されたシンプルなツールを提供します。そのため、go のネイティブな方法は、共有メモリを使用する代わりにチャネルを使用して通信することです。通信する。
前者は誰もが状態を維持することを意味し、後者は誰もが状態のコピーを維持することを意味すると思います。
共有メモリでは、複数のスレッドが同時にデータにアクセスして変更する必要があり、データのセキュリティと可視性を確保するために、ロックが実行され、並列処理がシリアル化され、CPU もスレッドのロック取得でビジー状態になります。方法を変更して、各スレッドが独自にデータをコピーする方が、1 つのスレッドが 1 つの処理を完了する限り、他のスレッドがロックを取得する必要がなくなります。同時実行性を達成するためにスレッドを通知の形式で引き渡します。
実際、分散の観点から理解すると、より明確になります。
たとえば、2 つのプロセス ab が同じメッセージ キューを一緒に操作する場合、共有メモリが使用される場合、2 つのプロセスは同じ物理マシンに限定される必要があり、通信の意味は大幅に減少します。
設計時にメッセージ キューに読み取りと書き込みのインターフェイスのみが提供され、内部実装についてまったく心配する必要がない場合、メッセージ キューは共有メモリのように見えるでしょう。ただし、メッセージ キューはソケットを使用して通信できます。
つまり、上記の文、通信の実装に共有メモリを使用しないということは、最初からプログラムを単一のマシンに限定するのではなく、通信を使用する、つまり内部実装をカプセル化し、対応する処理を実行するためのインターフェイスを提供することを意味します。運営