国产成人精品久久免费动漫-国产成人精品天堂-国产成人精品区在线观看-国产成人精品日本-a级毛片无码免费真人-a级毛片毛片免费观看久潮喷

您的位置:首頁技術文章
文章詳情頁

java - 如何理解“不要通過共享內存來通信,而應該通過通信來共享內存”?

瀏覽:113日期:2024-01-05 15:34:18

問題描述

不要通過共享內存來通信,而應該通過通信來共享內存

這是一句風靡golang社區的經典語,對于剛接觸并發編程的人,該如何理解這句話?

問題解答

回答1:

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

這篇文章里面說的比較清楚了,使用共享內存的話在多線程的場景下為了處理競態,需要加鎖,使用起來比較麻煩。另外使用過多的鎖,容易使得程序的代碼邏輯堅澀難懂,并且容易使程序死鎖,死鎖了以后排查問題相當困難,特別是很多鎖同時存在的時候。

go語言的channel保證同一個時間只有一個goroutine能夠訪問里面的數據,為開發者提供了一種優雅簡單的工具,所以go原生的做法就是使用channle來通信,而不是使用共享內存來通信。

回答2:

我認為前者的意思是大家都維護一個狀態,后者是每個人都維護一份狀態副本。

回答3:

共享內存會涉及到多個線程同時訪問修改數據的情況,那得保證數據的安全性,可見性,那就會加鎖,加鎖會讓并行變為串行,cpu也忙于線程搶鎖。不如換一種方式,把數據復制一份,每個線程有自己的,只要一個線程干完一件事其他線程不用去搶鎖了,這就是一種通信方式,把共享的以通知方式交給線程,實現并發

回答4:

其實如果從分布式的角度來理解,就會比較明了了。

打比方,ab兩個進程共同對同一個消息隊列進行操作,那么,如果使用共享內存的話,是不是這兩個進程就必須局限在同一個物理機上,那么通信的意義就大大縮小了。

如果在設計的時候,對于消息隊列,只提供讀寫接口,而對于內部的實現你完全不用去在意,看起來消息隊列就像是共享內存一樣了。然而你的消息隊列可以利用socket進行通信。

所以,上述這句話,不要用共享內存實現通信是指不要讓程序一開始就局限在單機上,而是利用通信,也就是封裝內部實現,提供接口的方式來進行相應的操作

標簽: java
主站蜘蛛池模板: 亚洲特黄视频 | 黄网站在线播放视频免费观看 | 国产精品视频久久 | 免费一级毛片正在播放 | 国产成人高清亚洲一区91 | 99一区二区三区 | 黄色a三级三级三级免费看 黄色a网 | 国产1000部成人免费视频 | 国产精品高清在线 | 一本久道在线 | 久久99国产精品久久99无号码 | 男人天堂男人天堂 | 国产日韩欧美综合一区二区三区 | 韩国欧洲一级毛片免费 | 日本aaaa精品免费视频 | 香蕉成人国产精品免费看网站 | 欧美午夜伦y4480私人影院 | 久久免费在线视频 | 亚洲欧美中文字幕在线网站 | 97天天干 | 亚洲欧美另类日本久久影院 | 国产免费观看a大片的网站 国产免费黄色网址 | 亚洲乱码一二三四五六区 | 亚洲精品专区一区二区三区 | 亚洲经典乱码在线播 | 欧美色视频日本片免费高清 | 亚洲国产日韩a在线亚洲 | 一级免费 | 日本一线a视频免费观看 | 色欧美与xxxxx | 一级亚洲| 久久久久免费 | 国产一区免费在线观看 | 亚洲精品国产精品国自产网站 | 精品三级在线观看 | 亚洲欧美成人综合在线 | 国产九九精品视频 | 国产成人综合亚洲亚洲欧美 | 亚洲国产成人va在线观看网址 | 精品无码三级在线观看视频 | 国产成人精品日本亚洲专一区 |