Sự khác nhau giữa hàng đợi tin nhắn và đường ống trong Linux là gì?Đường ống so với hàng đợi msg
Trả lời
Off đỉnh đầu của tôi và giả sử bạn nói về hàng đợi tin nhắn POSIX (không phải là những SysV):
- Ống không giới hạn về kích thước, hàng đợi tin nhắn là.
- Ống có thể được tích hợp trong hệ thống bằng cách sử dụng bộ mô tả tập tin, hàng đợi tin nhắn có bộ chức năng riêng, mặc dù linux hỗ trợ
select()
,poll()
,epoll()
và bạn bè trênmqd_t
. - Ống, khi đã đóng, yêu cầu một số lượng hợp tác trên cả hai mặt để thiết lập lại chúng, hàng đợi thông báo có thể được đóng và mở lại ở hai bên mà không có sự cộng tác của phía bên kia.
- Đường ống bằng phẳng, giống như một luồng, để áp đặt cấu trúc thông báo bạn sẽ phải triển khai giao thức ở cả hai bên, hàng đợi tin nhắn được định hướng thư, không cần quan tâm đến thông điệp thứ năm hàng đợi.
Chúng thực sự rất khác nhau.
Sự khác biệt thực tế lớn nhất là đường ống không có khái niệm "thông điệp", nó chỉ là một đường ống đến write()
byte đến và read()
byte từ. Đầu nhận phải có cách để biết phần dữ liệu nào cấu thành "thông điệp" trong chương trình của bạn, và bạn phải tự mình thực hiện. Hơn nữa thứ tự byte được định nghĩa: byte sẽ xuất hiện theo thứ tự bạn đặt vào. Và nói chung, nó có một đầu vào và một đầu ra.
Hàng đợi thư được sử dụng để chuyển "thư" có loại và kích thước. Vì vậy, kết thúc nhận được chỉ có thể chờ đợi cho một "tin nhắn" với một loại nhất định, và bạn không phải lo lắng nếu điều này là hoàn thành hay không. Một số quy trình có thể gửi và nhận từ cùng một hàng đợi.
xem man mq_overview
và/hoặc man svipc
để biết thêm thông tin.
ngay cả trong hàng đợi, bạn có thể gửi bất kỳ cấu trúc nào như thông báo vì vậy trong trường hợp này, đầu nhận phải biết "phần dữ liệu cấu thành thông báo trong chương trình của bạn. –
- 1. Đa xử lý Python - Đường ống vs Hàng đợi
- 2. Hàng đợi thông thường so với hàng đợi SEDA
- 3. Hàng đợi tin nhắn so với sự khác biệt hàng đợi của nhiệm vụ
- 4. Cách xem số lượng dữ liệu được xếp hàng đợi trong một đường ống có tên?
- 5. Hàng đợi tin nhắn so với dịch vụ web?
- 6. Ưu điểm và nhược điểm của Điều tra so với Ống so với Ống là gì?
- 7. Tại sao gian hàng đường ống gstreamer này?
- 8. Mẫu đường ống ZeroMQ
- 9. Lệnh chống ma sát với đường ống
- 10. Đường ống vào `adb shell`
- 11. Tkinter: Đợi mặt hàng trong hàng đợi
- 12. HTTP 1.1 Đường ống
- 13. Đường ray tài sản 3.1 đường ống với PDFKit
- 14. Đường ống so với ứng dụng một phần cho thiết kế API
- 15. Đường ống và quy trình
- 16. Đường ống trong lắp ráp
- 17. Tìm đường ống để tìm
- 18. Chỉ một khách hàng mới có thể kết nối với đường ống có tên
- 19. địa phương so với hàng đợi từ xa trong pub/sub nhắn
- 20. Hàng đợi C++ với các phụ thuộc
- 21. Tạo hàng đợi động với Celery
- 22. Bạn có thể đọc và viết với một khách hàng Ống có tên không?
- 23. Tại sao chia tách trên `|` (đường ống) không hoạt động như mong đợi?
- 24. toán tử logic hoặc so với || (ống đôi) trong php
- 25. Sự cố với các lệnh đường ống trong C
- 26. R Chức năng đường ống
- 27. Lệnh xuất khẩu đường ống
- 28. Hooking vào đường ống wcf
- 29. Đường ống & vòng lặp Linux
- 30. Hàng đợi chuỗi Android
ok, cảm ơn rất nhiều ... Nhưng tôi có một chút nghi ngờ "đường ống khi đóng cửa yêu cầu một số loại hỗ trợ trên cả hai mặt", bạn có nghĩa là để làm nổi bật điểm mà ống không phải là hạt nhân dai dẳng và tin nhắn queus là .. Và chính xác loại cần thiết nào được yêu cầu để reesatblish ống một khi đóng cửa? – mint9
@ mint9: nói chung bạn cần phải nắm bắt SIGPIPE, xử lý nó một cách duyên dáng, sau đó 'mở lại' ống. Tôi tưởng tượng bạn có thể fork() quá trình của bạn (trên cả hai mặt), dup stdin/stdout của bạn, giữ cho cha mẹ chạy (họ hành động như bảo vệ), sau đó khi bạn đóng cửa cho phép con bạn chết (trên cả hai mặt) và làm lại ngã ba/thủ tục dup/pipe. – hroptatyr
okie, tôi hiểu rồi. Cảm ơn – mint9