Какая разница между трубой и розеткой?

Оба могут использоваться для связи между различными процессами,

какая разница?

Ответ 1

В Windows есть два вида труб: анонимные трубы и именованные каналы. Анонимные трубы соответствуют (справедливо) близко к трубам Unix - типичное использование заключается в том, чтобы родительский процесс устанавливал их наследование дочерним процессом, часто связанным со стандартными потоками ввода, вывода и/или ошибок. В свое время анонимные каналы были реализованы совершенно иначе, чем именованные каналы, поэтому они (на одном примере) не поддерживали перекрывающиеся ввода-вывода. С тех пор это изменилось, так что анонимный канал - это просто именованный канал с именем, которого вы не знаете, поэтому вы не можете открыть его по имени, но он все еще имеет все другие функции именованного канала (например, вышеупомянутые перекрывающиеся возможности ввода/вывода).

Windows с именем pipe больше похожа на сокеты. Они возникли с OS/2, где они изначально были основным механизмом создания клиент-серверных приложений. Они были первоначально построены вокруг NetBIOS (т.е. Использовали NetBIOS как для адресации, так и для транспорта). Они тесно интегрированы с такими вещами, как проверка подлинности Windows, поэтому вы можете (например) иметь именованный сервер каналов олицетворять клиента, чтобы ограничить сервер выполнением того, что клиент мог бы выполнить, если он был зарегистрирован напрямую. Совсем недавно MS столкнулась с некоторыми проблемами, чтобы избавиться от зависимости от NetBIOS, но, хотя они теперь могут использовать IP в качестве своего транспорта (и DNS для адресации, IIRC), они по-прежнему используются в основном для машин Windows. Основное использование на других машинах - имитация Windows, например, запуск Samba.

Ответ 2

(Бесстыдно вырезано из http://www.perlmonks.org/?node_id=180842)

Трубы быстрые и надежные, потому что они реализованы в памяти на одном хосте, где выполняются оба процесса связи. Сокеты медленнее и менее надежны, но гораздо более гибкие, поскольку они позволяют осуществлять связь между процессами на разных хостах.

Ответ 3

Сокеты будут использовать какой-то IP-протокол, такой как TCP/IP или UDP, поэтому будет медленнее, но ваш код будет более портативным, если вам нужно будет общаться по сети. Существует третий подход Shared Mem и вперед порты Mach (в этом случае я не уверен, что он будет работать с Windows)

Ответ 4

(Сверху моей головы)

Труба: трубка с маленькой миской на одном конце; используется для курения табака

Гнездо: Розетка, в которую вставлено что-то (труба, зонд или конец кости)

В любом случае:

"Основное различие между трубами и что трубы требуют общего родительский процесс для настройки канал связи. Связь между сокетами можно настроить двумя несвязанные процессы, возможно, проживающие на разных машинах".

Ответ 5

Оба они выполняют одну и ту же функцию, единственное отличие состоит в том, что трубы более эффективны, так как они наиболее близки друг к другу, чтобы добраться до barebone-интернов. Розетки - это абстракция, построенная поверх ряда трубок (труб), в результате они медленнее (так же, как java медленнее, чем собственный код сборки).