[sql-server] 명명 된 파이프는 무엇입니까?

그들은 무엇이며 어떻게 작동합니까?

컨텍스트는 SQL Server입니다.



답변

Windows 및 POSIX 시스템 모두에서 명명 된 파이프는 동일한 시스템에서 실행되는 프로세스간에 프로세스 간 통신을 수행 할 수있는 방법을 제공합니다. 명명 된 파이프가 제공하는 것은 네트워크 스택과 관련된 성능 저하없이 데이터를 전송하는 방법입니다.

들어오는 요청에 대해 IP 주소 / 포트를 수신하는 서버가있는 것처럼 서버는 요청을 수신 할 수있는 명명 된 파이프를 설정할 수도 있습니다. 두 경우 모두 클라이언트 프로세스 (또는 DB 액세스 라이브러리)는 요청을 보낼 특정 주소 (또는 파이프 이름)를 알아야합니다. 흔히 사용되는 표준 기본값이 존재하는 경우가 많습니다 (HTTP의 포트 80과 마찬가지로 SQL Server는 TCP / IP의 포트 1433을 사용하고 명명 된 파이프의 경우 \\. \ pipe \ sql \ query를 사용합니다).

추가 명명 된 파이프를 설정하면 각각 고유 한 요청 리스너를 가진 여러 DB 서버를 실행할 수 있습니다.

명명 된 파이프의 장점은 일반적으로 훨씬 빠르며 네트워크 스택 리소스를 확보한다는 것입니다.

-BTW, Windows 환경에서는 명명 된 파이프를 원격 시스템으로 전송할 수도 있지만이 경우 명명 된 파이프는 TCP / IP를 통해 전송되므로 성능이 저하됩니다. 로컬 머신 통신에는 명명 된 파이프를 사용하십시오.


답변

유닉스와 윈도우는 모두 “명명 된 파이프”라는 것을 가지고 있지만 다르게 동작합니다. 유닉스에서 명명 된 파이프는 일반적으로 단 하나의 독자와 작가가있는 단방향 도로입니다. 작가는 글을 쓰고 독자는 읽습니다.

Windows에서 “명명 된 파이프”라는 것은 TCP 소켓과 유사한 IPC 객체입니다. 두 가지 방식으로 모두 흐를 수 있고 일부 메타 데이터가 있습니다 (다른 쪽에서 해당 자격 증명을 얻을 수 있음).

유닉스 명명 된 파이프는 파일 시스템에서 특수 파일로 나타나며 쉘을 포함한 일반 파일 IO 명령으로 액세스 할 수 있습니다. Windows는 특별한 시스템 호출로 열리지 않아야하며 (그 후에는 보통 win32 핸들과 같이 동작합니다).

더 혼란스러운 Unix에는 “Unix socket”또는 AF_UNIX 소켓이 있는데, 이는 win32 “named pipe”와 유사하지만 양방향으로 작동합니다.


답변


FIFO ( Linux Pipes First In First Out) 프로세스 간 통신 메커니즘.

명명되지 않은 파이프
명령 행에서 “|” 두 명령 사이.

명명 된 파이프
FIFO 특수 파일. 일단 생성되면 파이프를 일반 파일 (열기, 닫기, 쓰기, 읽기 등)처럼 사용할 수 있습니다.

명령 행 ( man page ) 에서 “myPipe”라는 이름의 파이프를 작성하려면 다음을 수행 하십시오 .

mkfifo myPipe  

c에서 명명 된 파이프를 만들려면 여기서 “pathname”은 파이프에 원하는 이름이고 “mode”는 파이프에 원하는 권한을 포함합니다 ( 맨 페이지 ).

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


답변

Wikipedia 에 따르면 :

[…] 기존 파이프는 익명으로 존재하고 프로세스가 실행되는 동안 만 지속되므로 “이름이 지정되지 않았습니다”. 명명 된 파이프는 시스템에 영구적이며 프로세스 수명을 넘어 존재하며 더 이상 사용되지 않으면 “연결 해제”되거나 삭제되어야합니다. 프로세스는 일반적으로 IPC (프로세스 간 통신)를 수행하기 위해 명명 된 파이프 (일반적으로 파일로 표시됨)에 연결됩니다.


답변

비교

echo "test" | wc

mkdnod apipe p
wc apipe

화장실 때까지 차단

echo "test" > apipe

실행


답변

파이프는 응용 프로그램간에 데이터를 스트리밍하는 방법입니다. 리눅스에서는 한 프로세스의 출력을 다른 프로세스로 스트리밍하기 위해 항상 이것을 사용합니다. 대상 앱은 입력 스트림의 출처를 모릅니다. 필요하지 않습니다.

명명 된 파이프는 적극적으로 기존 파이프에 후킹 hoovering 업 데이터를하는 방법이다. 제공자가 어떤 클라이언트가 데이터를 먹을지 알지 못하는 상황을위한 것입니다.


답변

이것은 Technet의 exeprt입니다 (따라서 표시된 답변이 명명 된 파이프가 더 빠르다는 이유는 확실하지 않습니다 ??).

명명 된 파이프와 TCP / IP 소켓

빠른 근거리 통신망 (LAN) 환경에서 TCP / IP (Transmission Control Protocol / Internet Protocol) 소켓 및 명명 된 파이프 클라이언트는 성능과 관련하여 비슷합니다. 그러나 TCP / IP 소켓과 Named Pipes 클라이언트의 성능 차이는 WAN (Wide Area Network) 또는 전화 접속 네트워크와 같은 느린 네트워크에서 분명해집니다. 이는 프로세스 간 통신 (IPC) 메커니즘이 피어간에 통신하는 방식이 다르기 때문입니다.

명명 된 파이프의 경우 네트워크 통신은 일반적으로 더 대화식입니다. 피어는 다른 피어가 읽기 명령을 사용하여 요청할 때까지 데이터를 보내지 않습니다. 네트워크 읽기에는 일반적으로 데이터 읽기를 시작하기 전에 파이프 이름이 지정된 파이프 메시지가 포함됩니다. 이들은이 될 수 느린 네트워크에 과도한 네트워크 트래픽이 원인이 매우 비용이 많이 드는 차례로 다른 네트워크 클라이언트에 영향을 미칩니다.

로컬 파이프 또는 네트워크 파이프에 대해 이야기하고 있는지 명확히하는 것도 중요합니다. 서버 응용 프로그램이 SQL Server 인스턴스를 실행하는 컴퓨터에서 로컬로 실행중인 경우 로컬 명명 된 파이프 프로토콜이 옵션입니다. 로컬 명명 된 파이프는 커널 모드에서 실행되며 매우 빠릅니다.

TCP / IP 소켓의 경우 데이터 전송이보다 간소화되고 오버 헤드가 줄어 듭니다. 데이터 전송은 윈도우 잉, 지연된 승인 등과 같은 TCP / IP 소켓 성능 향상 메커니즘을 이용할 수도 있습니다. 이것은 느린 네트워크에서 매우 유용 할 수 있습니다. 응용 프로그램 유형에 따라 이러한 성능 차이가 클 수 있습니다.

TCP / IP 소켓은 백 로그 큐도 지원합니다. 이렇게하면 명명 된 파이프와 비교하여 제한적인 스무딩 효과를 제공하여 SQL Server에 연결하려고 할 때 파이프 사용 중 오류가 발생할 수 있습니다.

일반적으로 TCP / IP는 느린 LAN, WAN 또는 전화 접속 네트워크에서 선호되는 반면, 명명 된 파이프는 더 많은 기능, 사용 편의성 및 구성 옵션을 제공하므로 네트워크 속도가 문제가되지 않을 때 더 나은 선택이 될 수 있습니다.