java - 如何理解“不要通过共享内存来通信,而应该通过通信来共享内存”?
大家讲道理
大家讲道理 2017-04-18 10:53:51
0
4
1855

不要通过共享内存来通信,而应该通过通信来共享内存

这是一句风靡golang社区的经典语,对于刚接触并发编程的人,该如何理解这句话?

大家讲道理
大家讲道理

光阴似箭催人老,日月如移越少年。

répondre à tous(4)
Ty80

https://blog.golang.org/share...

Cet article précise que si vous utilisez la mémoire partagée, afin de gérer les conditions de concurrence dans un scénario multithread, vous devez la verrouiller, ce qui est plus difficile à utiliser. De plus, l'utilisation d'un trop grand nombre de verrous peut facilement rendre la logique du code du programme difficile à comprendre et peut facilement provoquer un blocage du programme. Une fois le blocage survenu, il est très difficile de résoudre le problème, en particulier lorsqu'il existe de nombreux verrous au niveau du programme. en même temps.

Le canal du langage go garantit qu'une seule goroutine peut accéder aux données qu'il contient en même temps, offrant ainsi aux développeurs un outil élégant et simple. Par conséquent, la méthode native de go consiste à utiliser le canal pour communiquer au lieu d'utiliser la mémoire partagée. pour communiquer.

Peter_Zhu

Je pense que le premier signifie que tout le monde maintient un État, et le second signifie que tout le monde conserve une copie de l'État.

洪涛

La mémoire partagée impliquera que plusieurs threads accèdent et modifient les données en même temps. Pour garantir la sécurité et la visibilité des données, le verrouillage transformera le parallélisme en sérialisation et le processeur sera également occupé avec les threads. Verrouillage. Il est préférable de changer de méthode et de faire une copie des données. Tant qu'un thread termine une chose, les autres threads n'ont pas besoin de saisir le verrou. remis sous forme de notification Fils pour atteindre la concurrence

伊谢尔伦

En fait, si vous le comprenez dans une perspective distribuée, ce sera plus clair.

Par exemple, deux processus ab fonctionnent ensemble sur la même file d'attente de messages. Si la mémoire partagée est utilisée, les deux processus doivent-ils être limités à la même machine physique ? Le sens de la communication est alors considérablement réduit.

Si lors de la conception, seules des interfaces de lecture et d'écriture sont fournies pour la file d'attente des messages et que vous n'avez pas du tout à vous soucier de l'implémentation interne, il semblera que la file d'attente des messages est comme une mémoire partagée. Cependant, votre file d'attente de messages peut communiquer à l'aide de sockets.

Donc, la phrase ci-dessus, ne pas utiliser la mémoire partagée pour implémenter la communication, signifie ne pas limiter le programme à une seule machine dès le début, mais utiliser la communication, c'est-à-dire encapsuler l'implémentation interne et fournir une interface pour effectuer les opérations correspondantes

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal