Chính xác thì sự khác biệt giữa ống và suối là gì?


7

Tôi đọc về đường ống và luồng và tôi vẫn bối rối về cách nó được thực hiện.

Một chương trình được bắt đầu và nó đọc dữ liệu từ luồng đầu vào tiêu chuẩn (stdin) của tiêu chuẩn, đó là nơi bàn phím gửi dữ liệu đến.

Câu hỏi của tôi là, nó khác với ống như thế nào? Đường ống cho phép tôi có một quy trình gửi dữ liệu đến một đường ống và một quy trình khác là đọc dữ liệu từ nó.

Khi nhấn bàn phím, dữ liệu được gửi đến stdin và một chương trình đang đọc dữ liệu từ cùng một luồng.

Thao tác "đọc" được thực thi ngay khi dữ liệu được gửi đến luồng này, giống như một đường ống.

Là những dòng chảy đường ống?

Câu trả lời:


7

Theo truyền thống, thiết bị đầu cuối Unix đã được triển khai như một loại hàng đợi . Hạt nhân cũ sử dụng clists. V8 sử dụng luồng Unix . Trong hầu hết các trường hợp, clists và stream được sử dụng để thực hiện một phần liên kết giữa quy trình người dùng (cụ thể là bộ mô tả tệp) và trình điều khiển thiết bị ký tự (ví dụ: cổng nối tiếp hoặc pty).

Các đường ống cũng là một hàng đợi, nhưng chúng liên kết các quá trình của người dùng (cụ thể là một cặp mô tả tệp). Có nhiều cách triển khai đường ống, bao gồm cả ổ cắm; một loại tập tin đặc biệt; và thậm chí STREAM (STREAM là một dẫn xuất của các luồng V8.)

Vì vậy, các luồng và đường ống đều là các triển khai của một hàng đợi, nhưng chúng được sử dụng trong các tình huống khác nhau.


5

Điều này có thể không hoàn toàn chính xác từ góc độ kỹ thuật, nhưng có thể giúp bạn nhầm lẫn. Tôi có xu hướng nghĩ về một luồng như một cái gì đó nội tại của chương trình, chẳng hạn như STDIN, STDOUT và STDERR, trong khi một đường ống nằm ngoài chương trình. Ví dụ, trong lệnh cat foo.txt | grep bar, catlệnh sẽ gửi tới STDOUT nội tại của nó, đường ống bên ngoài sau đó kết nối nó với grepSTDIN nội tại.


Bạn nói rằng một luồng không phải là bên ngoài (như một đường ống), nhưng kết nối giữa chương trình và bàn phím đang được xử lý bên ngoài bởi một luồng. Chương trình không đọc trực tiếp từ bàn phím, thay vào đó nó đọc từ một bản tóm tắt là luồng.
1091856

Nhưng bạn không cần phải làm gì đặc biệt để có được luồng đó - nó chỉ tự động ở đó. Đó là điểm quan trọng đối với tôi. Một lần nữa, tôi có thể không hoàn toàn chính xác về mặt kỹ thuật, nhưng tôi đang cố gắng giúp xóa tan sự nhầm lẫn.
Giăng
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.