Về cơ bản, các đường ống - dù được đặt tên hay ẩn danh - đều được sử dụng như truyền thông điệp. Ai đó gửi một mẩu thông tin đến người nhận và người nhận có thể nhận được thông tin đó. Bộ nhớ dùng chung giống như xuất bản dữ liệu - một người nào đó đặt dữ liệu vào bộ nhớ dùng chung và người đọc (nhiều khả năng) phải sử dụng đồng bộ hóa, ví dụ: thông qua semaphores để tìm hiểu về thực tế là có dữ liệu mới và phải biết cách đọc vùng bộ nhớ để tìm thông tin.
Với đường ống đồng bộ hóa đơn giản và được tích hợp vào cơ chế ống - đọc và viết của bạn sẽ đóng băng và hủy cố định ứng dụng khi có điều gì đó thú vị xảy ra. Với bộ nhớ dùng chung, việc làm việc không đồng bộ dễ dàng hơn và chỉ kiểm tra dữ liệu mới một lần trong một thời gian - nhưng với chi phí của mã phức tạp hơn nhiều. Thêm vào đó bạn có thể nhận được nhiều giao tiếp nhưng nó đòi hỏi nhiều công việc trở lại. Ngoài ra, do sự cố trên, việc gỡ lỗi giao tiếp dựa trên đường ống dễ dàng hơn việc gỡ lỗi bộ nhớ dùng chung.
Sự khác biệt nhỏ là năm mươi hiển thị trực tiếp trong hệ thống tệp trong khi vùng bộ nhớ dùng chung cần các công cụ đặc biệt như ipcs
để quản lý trong trường hợp bạn sử dụng tạo ra một phân chia bộ nhớ chia sẻ nhưng ứng dụng của bạn chết và không dọn dẹp sau chính nó (tương tự với các semaphores và nhiều cơ chế đồng bộ khác mà bạn có thể cần sử dụng cùng với bộ nhớ dùng chung).
Bộ nhớ dùng chung cũng cho phép bạn kiểm soát nhiều hơn việc sử dụng tài nguyên và sử dụng tài nguyên - trong giới hạn cho phép của hệ điều hành, đó là bạn quyết định lượng bộ nhớ cần phân bổ và cách sử dụng. Với đường ống, hệ điều hành tự động điều khiển mọi thứ, vì vậy một lần nữa bạn mất một số tính linh hoạt nhưng được giảm bớt nhiều công sức. Tóm tắt các điểm quan trọng nhất: đường ống cho giao tiếp một-một, ít mã hóa và cho phép hệ điều hành xử lý mọi thứ, chia sẻ bộ nhớ cho nhiều người, kiểm soát thủ công nhiều thứ hơn nhưng với chi phí làm việc nhiều hơn và gỡ lỗi khó hơn.
Nguồn
2012-03-14 13:30:04
Lưu ý rằng viết chỉ có nguyên tử nếu không lớn hơn PIPE_BUF về kích thước. –