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

Каковы они и как они работают?

Контекст - это SQL Server

Ответ 1

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

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

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

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

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

Ответ 2

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

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

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

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

Ответ 3

Linux-каналы
Механизм межпроцессного взаимодействия First In First Out (FIFO).

Без названия
В командной строке, представленной символом "|" между двумя командами.

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

Чтобы создать именованный канал, называемый "myPipe", из командной строки (справочная страница):

mkfifo myPipe  

Чтобы создать именованный канал из c, где "путь" - это имя, которое вы хотели бы иметь в канале, и "режим" содержит разрешения, которые вы хотите иметь в канале (справочная страница):

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

Ответ 4

Согласно Wikipedia:

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

Ответ 5

Сравнение

echo "test" | wc

к

mkdnod apipe p
wc apipe

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

echo "test" > apipe

выполняется

Ответ 6

Связь между процессами (в основном) для приложений Windows. Подобно использованию сокетов для связи между приложениями в Unix.

MSDN

Ответ 7

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

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

Ответ 8

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

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

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

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

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

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

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

Ответ 9

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

Именованные каналы и сокеты TCP/IP

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

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

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

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

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

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

Ответ 10

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

  • Именованные каналы используют каналы межпроцессной связи (IPC) для эффективной межсерверной связи, а также для связи по локальной сети (LAN).

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

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

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

Ответ 11

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