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

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

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

大家讲道理
大家讲道理

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

membalas semua(4)
Ty80

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

Artikel ini menjelaskan dengan lebih jelas bahawa jika anda menggunakan memori yang dikongsi, untuk mengendalikan keadaan perlumbaan dalam senario berbilang benang, anda perlu menguncinya, yang lebih menyusahkan untuk digunakan. Di samping itu, menggunakan terlalu banyak kunci dengan mudah boleh menjadikan logik kod program sukar difahami, dan boleh menyebabkan program buntu dengan mudah Selepas kebuntuan berlaku, adalah sangat sukar untuk menyelesaikan masalah, terutamanya apabila banyak kunci wujud di masa yang sama.

Saluran bahasa go memastikan bahawa hanya satu goroutine boleh mengakses data di dalam pada masa yang sama, memberikan pembangun alat yang elegan dan mudah Oleh itu, kaedah asli go ialah menggunakan saluran untuk berkomunikasi dan bukannya menggunakan memori dikongsi untuk berkomunikasi.

Peter_Zhu

Saya rasa yang pertama bermakna semua orang mengekalkan negeri, dan yang kedua bermakna semua orang mengekalkan salinan negeri.

洪涛

Memori yang dikongsi akan melibatkan berbilang utas mengakses dan mengubah suai data pada masa yang sama Untuk memastikan keselamatan dan keterlihatan data, penguncian akan dilakukan agar selari menjadi bersiri, dan CPU juga akan sibuk dengan utas. Kunci. Adalah lebih baik untuk mengubah cara dan membuat salinan data Setiap utas mempunyai satu perkara, selagi satu utas tidak perlu mengambil kunci ini diserahkan dalam bentuk pemberitahuan. Threads untuk mencapai concurrency

伊谢尔伦

Malah, jika anda memahaminya dari perspektif yang diedarkan, ia akan menjadi lebih jelas.

Sebagai contoh, dua proses ab beroperasi pada baris gilir mesej yang sama Jika memori dikongsi digunakan, adakah kedua-dua proses itu perlu dihadkan kepada mesin fizikal yang sama.

Jika semasa reka bentuk, hanya antara muka baca dan tulis disediakan untuk baris gilir mesej, dan anda tidak perlu risau sama sekali tentang pelaksanaan dalaman, baris gilir mesej akan kelihatan seperti memori kongsi. Walau bagaimanapun, baris gilir mesej anda boleh berkomunikasi menggunakan soket.

Jadi, ayat di atas, jangan gunakan memori yang dikongsi untuk melaksanakan komunikasi, bermakna tidak menghadkan program kepada satu mesin dari awal, tetapi menggunakan komunikasi, iaitu, untuk merangkum pelaksanaan dalaman dan menyediakan antara muka untuk melaksanakan operasi yang sepadan

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan