2008-10-06 3 views
106

Что они и как они работают?Как называются трубы?

Контекст случается SQL Server

+0

Это также очень исчерпывающий ответ: http://askubuntu.com/questions/449132/why-use-a-named-pipe-instead-of-a-file – 2016-04-15 15:32:06

ответ

119

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

Как и сервер, который прослушивает IP-адрес/порт для входящих запросов, сервер также может настроить именованный канал, который может прослушивать запросы. В любом случае клиентский процесс (или библиотека доступа БД) должен знать конкретный адрес (или имя канала) для отправки запроса. Часто обычно используется стандартная стандартная версия (как и порт 80 для HTTP, сервер SQL использует порт 1433 в TCP/IP; \\. \ Pipe \ sql \ query для именованного канала).

Установив дополнительные именованные каналы, вы можете запустить несколько серверов БД, каждый из которых имеет свои собственные прослушиватели запросов.

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

- BTW, в мире Windows вы также можете иметь именованные каналы для удаленных компьютеров, но в этом случае именованный канал переносится через TCP/IP, поэтому вы потеряете производительность. Используйте именованные каналы для локальной связи.

15

По Wikipedia:

[...] Традиционная труба «безымянный», потому что существует анонимно и сохраняется только до тех пор, пока этот процесс Бег. Именованный канал является системно-стойким и существует за пределами срока действия процесса и должен быть «отсоединен» или удален, если он больше не используется. Обычно процессы присоединяются к именованному каналу (обычно отображаемому в виде файла) для выполнения IPC (межпроцессная связь).

5

Межпроцессное взаимодействие (в основном) для приложений Windows. Аналогично использованию сокетов для связи между приложениями в Unix.

MSDN

+2

Именованные каналы появился в V6 или AT & T Unix около 1975. – dmckee 2008-10-06 18:37:53

+0

Doh! Это немного раньше Microsoft. Насколько я знаю, они часто не используются в приложениях Unix/Linux. Правда? – Ken 2008-10-06 18:40:20

+0

Пара моих кодов использует их. Это так? – dmckee 2008-10-06 18:41:10

5

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

A , названный Труба - это всего лишь способ активно подключиться к существующей трубе и обдувать ее данные. Это касается ситуаций, когда провайдер не знает, какие клиенты будут есть данные.

1

Именованные трубы - это система окон для межпроцессного взаимодействия. В случае сервера SQL, если сервер находится на том же компьютере, что и клиент, тогда можно использовать именованные каналы для переноса данных, в отличие от TCP/IP.

7

Сравнить

echo "test" | wc 

в

mkdnod apipe p 
wc apipe 

туалет будет блокироваться до

echo "test" > apipe 

не выполняет

19

Linux Трубы
Механизм взаимодействия между первым и первым выходом (FIFO).

Безымянные Трубы
в командной строке, в лице "|" между двумя командами.

Именованные трубы
A FIFO специальный файл. После создания вы можете использовать этот канал так же, как обычный файл (открывать, закрывать, писать, читать и т. Д.).

Чтобы создать именованный канал, называемый «myPipe», из командной строки (man page):

mkfifo myPipe 

Чтобы создать именованный канал от с, где «путем» является имя, которое вы хотели бы трубу иметь и «режим» содержит разрешение вы хотите трубу иметь (man page):

#include <sys/types.h> 
#include <sys/stat.h> 
int mkfifo(const char *pathname, mode_t mode); 
34

У Unix и Windows есть вещи, называемые «Именованные трубы», но они ведут себя по-разному. В Unix, именованный канал - это улица с односторонним движением, в которой обычно есть только один читатель и один писатель, - пишет писатель, и читатель читает, вы его получите?

В Windows вещь, называемая «Именованная труба», представляет собой объект IPC, более похожий на сокет TCP - все может протекать в обоих направлениях, и есть некоторые метаданные (вы можете получить учетные данные вещи на другом конце и т. Д.). ,

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

Еще более запутанным является то, что Unix имеет нечто вроде сокета Unix или AF_UNIX, которое более похоже на (но не совсем похожее) на win32 «named pipe», будучи двунаправленным.

3

Именованные трубы в контексте unix/linux могут использоваться для связи двух разных оболочек, поскольку оболочка просто не может делиться чем-либо другим.

Кроме того, один сценарий, созданный дважды в одной оболочке, не может ничего передавать через два экземпляра. Я нашел использование для именованных каналов при кодировании демона, который содержит функцию start() и stop(), и я хотел использовать тот же скрипт для выполнения двух действий.

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

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

Решение заключалось в том, чтобы реализовать две трубы, одну READ и другую WRITE при запуске демона. Затем заставьте его, среди других своих задач, прослушать трубу READ. Затем функция Stop() содержит команду, которая будет писать сообщение в трубке, которое будет обрабатываться сценарием, выполняющим фоновый режим, который выполнит выход 0. Таким образом, наш второй экземпляр того же скрипта должен выполнять только одну задачу: скажите первому экземпляру остановиться.

Таким образом, один и только один скрипт может запускаться и останавливаться.

Конечно, у вас есть разные способы сделать это, нажав кнопку, например, нажатием кнопки. Но этот хороший и интересный код.

3

Это exeprt из Technet (поэтому не уверен, почему отмеченный ответ говорит названные трубы быстрее ??):

Named Pipes против TCP/IP Sockets

В быстрой локальной области сети (LAN), протоколы управления протоколом передачи/интернет-протокола (TCP/IP). Сокеты и именованные каналы сопоставимы с производительностью. Однако разница в производительности между клиентами TCP/IP Sockets и Named Pipes становится очевидной в более медленных сетях, таких как глобальные сети (WAN) или коммутируемые сети. Это происходит из-за различных способов взаимодействия межпроцессных коммуникационных (IPC) механизмов между одноранговыми узлами.

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

Также важно уточнить, если вы говорите о местных трубах или сетевых трубах. Если серверное приложение выполняется локально на компьютере, на котором запущен экземпляр SQL Server, локальный протокол Named Pipes является опцией. Локальные именованные каналы работают в режиме ядра и работают очень быстро.

Для сокетов TCP/IP передача данных более оптимизирована и имеет меньшие накладные расходы. Передача данных также может использовать преимущества механизмов повышения производительности сокетов TCP/IP, таких как оконные операции, отложенные подтверждения и т. Д. Это может быть очень полезно в медленной сети. В зависимости от типа приложений такие различия в производительности могут быть значительными.

Сокеты TCP/IP также поддерживают очередь на отставание. Это может обеспечить ограниченный эффект сглаживания по сравнению с именованными каналами, что может привести к ошибкам, связанным с трубой, когда вы пытаетесь подключиться к SQL Server.

Как правило, TCP/IP предпочтительнее в медленной локальной сети, глобальной сети или коммутируемой сети, тогда как именованные каналы могут быть лучшим выбором, когда скорость сети не является проблемой, поскольку она предлагает больше функциональности, простоты использования, и параметры конфигурации.

3

именованные каналы:

  1. именованные каналы использует межпроцессного взаимодействия каналов (МПК) для эффективного обмена данными между серверами, а также локальной сети (LAN) связи.

  2. Протокол Named Pipes имеет некоторые улучшения в SQL Server 2008, включая поддержку зашифрованного трафика, но из-за чрезмерных накладных расходов на Именованные каналы при подключении по сетям или брандмауэрам и дополнительного порта, который требует, чтобы Именованные каналы были открыты (445),

  3. Как правило, рекомендуется отключить протокол Named Pipes.
  4. Существует множество приложений, которые используют протокол Named Pipes, поскольку они были разработаны для реализации локальной сети.
  5. Именованные каналы обеспечивают легкий доступ к удаленным вызовам процедур (RPC) в пределах одного домена безопасности и поэтому выгодны для этих приложений.
  6. Если вам необходимо поддерживать один из приложений, необходимо иметь доступ к (RPC), а SQL Server не подвергается внешнему трафику, риск включения протокола Named Pipes и соответствующей конечной точки минимален.
  7. Протокол Named Pipes также предлагает высокопроизводительные преимущества при использовании клиентскими приложениями, находящимися в том же поле, что и база данных SQL Server, к которой обращаются,
  8. Именованные каналы также могут облегчать подключение клиентов к удаленным базам данных SQL Server или к SQL Server хосты на разных машинах
  9. Именованные трубы имеют два настраиваемых свойства • Включено: свойство Enabled работает так же, как и протокол общей памяти. • Название трубы: имя трубы указывает канал межпроцессного процесса, который будет прослушивать SQL Server. Строка по умолчанию - \. \ Pipe \ sql \ query.

http://saurabhsinhainblogs.blogspot.in/2015/09/what-is-difference-between-tcp-ip-and-Named-Pipes.html

Смежные вопросы