IPC против домена sock против именованных каналов

В чем разница между доменными сокетами IPC и Unix и именованными каналами?

Я получил расплывчатые определения из разных книг, но не мог понять, какое из них следует использовать и где.


person Jack    schedule 12.09.2009    source источник
comment
Кажется, этому потоку уделяется больше внимания: http://stackoverflow.com/questions/9475442/unix-domain-socket-vs-named-pipes   -  person schmijos    schedule 23.03.2013


Ответы (4)


Практически любой способ взаимодействия двух процессов друг с другом можно рассматривать как форму IPC.

Например:

  1. Каналы без названия (cat file.txt | grep foo) или Именованные каналы
  2. Доменные сокеты Unix
  3. Сокеты TCP или UDP
  4. Сокеты Netlink в Linux
  5. Различные механизмы общей памяти, такие как файлы с отображением памяти
  6. Высокоскоростная передача сообщений, например ZeroMQ
person Robert S. Barnes    schedule 13.09.2009

Как указано в qrdl, сокеты домена UNIX и именованные каналы являются механизмами IPC.

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

person caf    schedule 12.09.2009

IPC означает Межпроцессное взаимодействие. Доменные сокеты UNIX и именованные каналы - это всего лишь два механизма IPC, описанные в Википедии:

person qrdl    schedule 12.09.2009

Спасибо за внимание к вопросу, несколько обновленных функций:

В сокетах домена фактическая связь (обмен данными) не использует файловую систему, а буферизуется в памяти ядра. По умолчанию это полнодуплексный режим.

Именованные каналы идентифицируются своей точкой доступа, файлом, который хранится в файловой системе для обработки данных. Именованный канал по умолчанию поддерживает заблокированные операции чтения и записи. Однако можно сделать так, чтобы именованные каналы поддерживали неблокирующие операции, указав флаг O_NONBLOCK при их открытии. Именованный канал должен быть открыт только для чтения или только для записи. Его нельзя открывать для чтения-записи, потому что это полудуплексный, односторонний канал.

person Community    schedule 13.09.2009
comment
ОП спросил о доменных сокетах. Доменные сокеты обычно реализуются поверх каналов, поэтому они работают так же быстро, как и каналы. Доменные сокеты полезны, поскольку они имеют точно такой же интерфейс, что и сетевые сокеты (только другое семейство сокетов), поэтому, если ваше приложение поддерживает сокеты и вы обнаружили, что обе стороны находятся на одном компьютере, вы можете легко переключиться на сокеты домена, чтобы ускорить процесс. (X Windows делает это). Значит, ваш ответ неверен. - person qrdl; 13.09.2009