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.
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
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.
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