Каковы различия между каналами в Windows и Linux?
-
08-07-2019 - |
Вопрос
Чем отличаются каналы в Windows и Linux?
Решение
Одно из известных мне отличий состоит в том, что именованные каналы в Linux являются реальными записями в файловой системе (вы увидите это в списке каталогов, они имеют специальный тип), тогда как в Windows они хранятся в каком-то волшебном хранилище. где-то (все они доступны по пути " \\. \ pipe \ ".
Во-вторых, в Linux вы можете просто писать / читать из каналов, как если бы они были любым другим файлом, используя стандартные методы файлового ввода-вывода. В то время как в Windows вы должны использовать специальные функции «Pipe», которые являются частью Win32 API.
Мне больше нравится метод linux, потому что он позволяет мне использовать каналы с любым приложением, которое я хочу. Например:
mkfifo pipe.wav
decodeMP3 song.mp3 --out pipe.wav &
encodeAVI video.mpeg pipe.wav --out video.avi
Это позволяет мне направлять вывод декодера MP3 непосредственно в видеодекодер, вместо того, чтобы сначала декодировать весь MP3 в файл WAV на диске. Это удобно, если у вас двухъядерный процессор, потому что тогда вы выполняете обе операции одновременно, для хорошего ускорения.
Другие советы
В Linux (и * ix в целом) "все является файлом". Вы можете читать / писать / искать каналы и сокеты и устройства без ограничений, если эти операции имеют смысл.
В то время как Windows имеет гораздо менее унифицированную архитектуру для этих различных типов объектов. Хотя я не мог рассказать вам подробности, я знаю, что буферизация каналов значительно отличается в Windows и Linux, поэтому вы можете столкнуться с трудностями там.
Кроме того, одним из распространенных каналов Unix-y является использование fork ()
подпроцесса, а затем связь с ним по каналу (родительский элемент открывает один конец, дочерний - другой конец). Под Windows такие вещи просто невозможны. Механизмы IPC совершенно разные.
Смотрите также предыдущую тему:
Который содержит мой дубль и несколько других людей
Еще одно важное отличие
Под окнами
A | B | C
До тех пор, пока A не завершит работу с выходом B, он не начнет читать, то же самое для вывода B, читаемого C
* nix соединяет вход и выход вместе, так что C может читать выходные данные B, а B может читать выходные данные A, пока A и B все еще работают
Пропускная способность примерно такая же, но вывод отображается быстрее с * nix.