Những ưu và nhược điểm của giao tiếp quá trình Inter được thực hiện thông qua socket và bộ nhớ dùng chung là gì?


9

Tôi hiểu rằng hai trong số nhiều tùy chọn khác để liên lạc giữa các quá trình có thể là:

  1. Bộ nhớ dùng chung
  2. ổ cắm

Trên thực tế tôi đã thấy hai tùy chọn này được Intellij Idea đưa ra để gỡ lỗi một ứng dụng Java. Tôi muốn biết những ưu và nhược điểm của từng phương pháp.


Một phương pháp mới hơn là D-Bus.
ott--

@ ott-- Không phải D-Bus sử dụng ổ cắm tên miền Unix phải không?

@BrianMarshall Thật vậy, ổ cắm tên miền và tcp / ip.
ott--

Cũng có câu trả lời ở đây: stackoverflow.com/a/1844919/632951
Pacerier

Câu trả lời:


11

Một vài lợi thế cho mỗi ra khỏi đỉnh đầu của tôi. Lưu ý rằng một số mặt hàng này có thể không áp dụng trong mọi trường hợp; đây chỉ là những quan sát chung.

ổ cắm

Đơn giản và có kiểm soát. Có thể được mở rộng đến các ổ cắm mạng khi cần thiết với ít hoặc không sửa đổi. Mô hình lập trình yêu cầu tuần tự hóa, do đó đòi hỏi bạn phải suy nghĩ về dữ liệu nào thực sự được truyền từ A đến B. Đồng bộ hóa nhất thiết phải được tích hợp vào cơ chế truyền thông; không cần đồng bộ hóa khác.

Bộ nhớ dùng chung

Không nhất thiết yêu cầu một tòa nhà cao tầng (do đó có khả năng nhanh hơn). Chia sẻ không yêu cầu rõ ràng dữ liệu được truyền - dữ liệu có thể được cung cấp mà người nhận không truy xuất (băng thông không phải lãng phí khi truyền dữ liệu mà người nhận sẽ không sử dụng). Không có bước tuần tự hóa / giải tuần tự hóa có nghĩa là không có thời gian dành cho chi phí liên lạc.


4
+1: ổ cắm mở rộng đến các hệ thống phân tán trong khi bộ nhớ dùng chung nhanh hơn nhiều.
mouviciel

@tylerl Tại sao bộ nhớ chia sẻ không yêu cầu một tòa nhà cao tầng?
Geek

@Geek: Đọc về cách quản lý bộ nhớ ảo được thực hiện trong các HĐH hiện đại. Về cơ bản, bộ nhớ chia sẻ dưới mui xe được thực hiện gần như giống hệt với bộ nhớ quy trình thông thường. Nó chỉ xảy ra rằng cùng một trang vật lý có mục đích được ánh xạ thành 2 (hoặc N) các quy trình khác nhau. Nhưng một khi ánh xạ đó được thiết lập, * px = 5 tạo ra cùng một bộ hướng dẫn bất kể px chỉ đến một biến thông thường hay nếu nó chỉ vào một phân đoạn bộ nhớ dùng chung.
DXM

về mặt kỹ thuật, bạn không cần phải tuần tự hóa dữ liệu qua ổ cắm nếu đích có thể chấp nhận luồng byte thô theo định dạng bạn gửi. Hầu hết mọi người rõ ràng nối tiếp để họ có thể gửi cho bất cứ ai.
gbjbaanb

1
@gbjbaanb Tôi nghĩ về mặt kỹ thuật bạn đang tuần tự hóa dữ liệu nếu nó được truyền dưới dạng một chuỗi bit liên tiếp, bất kể cấu trúc mã hóa là gì.
tylerl

6

Ổ cắm là một-một. Bạn cần nhiều ổ cắm nếu bạn muốn gửi cùng một thứ cho nhiều quy trình. Với bộ nhớ chia sẻ, bạn có thể có nhiều người đọc, và cũng có nhiều nhà văn.

Ổ cắm là tài nguyên chuyên sâu. Mỗi và mọi thông điệp đều đi qua HĐH. Với bộ nhớ dùng chung, bạn ánh xạ bộ nhớ dùng chung nhưng một lần vào bộ nhớ của ứng dụng và từ đó trở thành bộ nhớ của bạn để sử dụng. Tuy nhiên, bạn vẫn cần thông qua HĐH khi bạn sử dụng bộ nhớ dùng chung; xem bên dưới.

Ổ cắm được đồng bộ hóa (miễn là bạn không sử dụng UDP). Với bộ nhớ dùng chung, bạn gần như chắc chắn cần một số cơ chế bổ sung để thông báo cho các quá trình khác rằng nó ổn / không ổn để đọc hoặc ghi vào bộ nhớ dùng chung. Đừng làm điều này và bạn sẽ gặp vấn đề với bộ nhớ bị hỏng. Ví dụ: Giả sử quá trình A bắt đầu đọc một bộ nhớ chia sẻ khối, nhưng bị hoán đổi giữa chừng khi đọc. Quá trình B ghi vào cùng một phần của bộ nhớ chia sẻ. Khi quá trình A khởi động lại và tiếp tục đọc bộ nhớ chia sẻ, những gì nó đã đọc là một sự nhầm lẫn của dữ liệu cũ và mới. Để ngăn chặn điều này, bạn vẫn truy cập HĐH khi bạn đang sử dụng bộ nhớ dùng chung.

Thật dễ dàng để chuyển đổi một bộ ứng dụng dựa trên ổ cắm sang một ứng dụng sử dụng ổ cắm mạng. Bạn có thể trải rộng quá trình xử lý đến tất cả các máy trong phòng thí nghiệm của bạn, hoặc thậm chí xa hơn. chỉ không thể làm điều này với bộ nhớ chia sẻ. Bạn bị khóa với một máy với giải pháp dựa trên bộ nhớ dùng chung.

Ổ cắm dành cho khối lượng dữ liệu thấp, bộ nhớ dùng chung cho khối lượng dữ liệu lớn. Các cơ chế khác nhau tồn tại để giải quyết các vấn đề khác nhau.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.