Оба могут использоваться для связи между разными процессами,
какая разница?
Оба могут использоваться для связи между разными процессами,
какая разница?
В Windows есть два типа каналов: анонимные каналы и именованные каналы. Анонимные каналы соответствуют (довольно) близко к каналам Unix - типичное использование - родительский процесс, чтобы настроить их для наследования дочерним процессом, часто подключенным к стандартным потокам ввода, вывода и / или ошибок дочернего процесса. В свое время анонимные каналы были реализованы совершенно иначе, чем именованные каналы, поэтому они (в одном примере) не поддерживали перекрывающийся ввод-вывод. С тех пор это изменилось, поэтому анонимный канал в основном представляет собой именованный канал с неизвестным вам именем, поэтому вы не можете открыть его по имени, но он по-прежнему имеет все другие функции именованного канала (например, вышеупомянутые возможности перекрывающегося ввода-вывода).
Именованные каналы Windows больше похожи на сокеты. Они возникли в OS / 2, где изначально были основным механизмом для создания клиент-серверных приложений. Изначально они были построены на основе NetBIOS (т. Е. Использовали NetBIOS как для адресации, так и для транспортировки). Они тесно интегрированы с такими вещами, как проверка подлинности Windows, поэтому вы можете (например) иметь сервер именованного канала, олицетворяющий клиента, чтобы ограничить сервер выполнением действий, которые клиент мог бы делать, если бы входил в систему напрямую. Совсем недавно MS приложила некоторые усилия, чтобы избавиться от зависимости от NetBIOS, но даже несмотря на то, что теперь они могут использовать IP в качестве своего транспорта (и DNS для адресации, IIRC), они все еще используются в основном для компьютеров Windows. Основное использование на других машинах - имитация Windows, например, запуск Samba.
(Без зазрения совести скопировано с http://www.perlmonks.org/?node_id=180842)
Каналы быстрые и надежные, потому что они реализованы в памяти на одном хосте, где выполняются оба взаимодействующих процесса. Сокеты медленнее и менее надежны, но гораздо более гибкие, поскольку они позволяют взаимодействовать между процессами на разных хостах.
(С верхней части моей головы)
Трубка: трубка с небольшой чашей на одном конце; используется для курения табака
Гнездо: приемник, в который что-то вставляется (трубка, зонд или конец кости).
В любом случае:
«Основное различие между конвейерами и сокетами состоит в том, что конвейерам требуется общий родительский процесс для настройки канала связи. Соединение между сокетами может быть установлено двумя несвязанными процессами, возможно, находящимися на разных машинах».
Сокеты будут использовать какой-то IP-протокол, такой как TCP / IP или UDP, поэтому они будут медленнее, но ваш код будет более переносимым, если вам нужно будет общаться по сети. Существует третий подход Shared mem и четыре порта Mach (в этом случае я не уверен, что он будет работать с Windows)
Оба они выполняют одну и ту же функцию, с той лишь разницей, что каналы более эффективны, поскольку они ближе всего к базовым сетям Интернета. Сокеты - это абстракция, построенная на основе ряда трубок (каналов), в результате чего они медленнее (так же, как java медленнее, чем собственный код сборки).