Tôi tự hỏi giải thích rõ ràng nhất cho câu nói nổi tiếng này là gì:Giải thích: Không giao tiếp bằng cách chia sẻ bộ nhớ; chia sẻ bộ nhớ bằng cách liên lạc
Không giao tiếp bằng cách chia sẻ bộ nhớ; chia sẻ bộ nhớ bằng cách giao tiếp. (R. Pike)
Trong The Go Memory Model tôi có thể đọc:
Một gửi trên một kênh xảy ra trước khi tương ứng nhận được từ kênh đó hoàn tất. (Golang Spec)
Ngoài ra còn có một số golang article dành riêng giải thích báo giá. Và đóng góp chính là working example cũng bởi Andrew G.
Vâng. Đôi khi quá nhiều nói chuyện xung quanh .... Tôi có nguồn gốc từ các báo giá Spec Memory và cũng bằng cách nhìn vào ví dụ làm việc này:
Sau khi goroutine1 gửi (bất cứ điều gì) đến một goroutine2 thông qua một kênh, sau đó tất cả thay đổi (bất cứ nơi nào trong bộ nhớ) được thực hiện bởi goroutine1 phải được hiển thị cho goroutine2 sau khi nó nhận được thông qua cùng một kênh. (Golang Bổ đề bởi Me :)
therfore tôi lấy được Down để giải thích đất của câu nói nổi tiếng:
Để đồng bộ hóa truy cập bộ nhớ giữa hai goroutines, bạn không cần phải gửi bộ nhớ mà qua kênh. Đủ tốt là nhận được từ kênh (thậm chí không có gì). Bạn sẽ thấy bất kỳ thay đổi nào được viết (ở bất kỳ đâu) bằng cách gửi goroutine (tới kênh) tại thời điểm gửi. (Tất nhiên, giả sử không có goroutines khác đang viết với cùng bộ nhớ.) Update (2) 8-26-2017
Tôi thực sự có hai câu hỏi:
1) là kết luận của tôi đúng ?
2) Lời giải thích của tôi có giúp ích không?
Cập nhật (1) Tôi giả định kênh unbuffered. Cho phép hạn chế bản thân để đầu tiên để tránh đại tu chính mình với quá nhiều ẩn số. Xin vui lòng, chúng ta cũng tập trung vào việc sử dụng đơn giản hai goroutines giao tiếp qua một kênh đơn và các hiệu ứng bộ nhớ liên quan chứ không phải trên các thực tiễn tốt nhất - vượt quá phạm vi của câu hỏi này.
Để hiểu rõ hơn phạm vi câu hỏi của tôi giả định rằng goroutines có thể truy cập bất kỳ cấu trúc bộ nhớ nào - không chỉ là cấu trúc bộ nhớ - và nó có thể là cấu trúc lớn, nó có thể là chuỗi, bản đồ, mảng, bất cứ thứ gì.
Kiểm tra viết TODO – honzajde