문제

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

컨텍스트는 SQL Server입니다

도움이 되었습니까?

해결책

Windows 및 Posix Systems에서 이름이 지정된 PIPE는 동일한 기계에서 실행되는 프로세스에서 프로세스 간 통신이 발생할 수있는 방법을 제공합니다. 이름이 지정된 파이프가 제공하는 것은 네트워크 스택 관련 성능 페널티없이 데이터를 보내는 방법입니다.

들어오는 요청을 위해 IP 주소/포트를 듣는 서버가있는 것처럼 서버는 요청을 듣는 이름의 파이프를 설정할 수도 있습니다. 두 경우 모두 클라이언트 프로세스 (또는 DB 액세스 라이브러리)는 요청을 보내려면 특정 주소 (또는 파이프 이름)를 알아야합니다. 종종 일반적으로 사용되는 표준 기본값이 존재합니다 (HTTP의 포트 80과 마찬가지로 SQL Server는 TCP/IP; . Pipe SQL 쿼리에서 포트 1433을 사용합니다).

추가 명명 된 파이프를 설정하면 자체 요청 리스너가있는 여러 DB 서버를 실행할 수 있습니다.

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

-BTW, Windows World에서는 원격 기계에 파이프를 명명 할 수도 있지만이 경우 이름이 지정된 파이프는 TCP/IP를 통해 전송되므로 성능을 잃게됩니다. 로컬 머신 커뮤니케이션에 명명 된 파이프를 사용하십시오.

다른 팁

유닉스와 창에는 "이름이 지정된 파이프"라는 것이 있지만 다르게 행동합니다. 유닉스에서 이름이 지정된 파이프는 일방 통행 거리로, 일반적으로 독자 한 명과 작가 한 명에 불과합니다. 작가는 글을 쓰고 독자는 읽습니다.

Windows에서 "명명 된 파이프"라고 불리는 것은 TCP 소켓과 같은 IPC 객체입니다. 사물은 두 가지 방법으로 흐르고 일부 메타 데이터가 있습니다 (다른 쪽 끝에있는 물건의 자격 증명을 얻을 수 있음).

UNIX 명명 된 파이프는 파일 시스템에서 특수 파일로 나타나며 쉘을 포함한 일반 파일 IO 명령으로 액세스 할 수 있습니다. Windows Ones는 특수 시스템 호출로 개방해야합니다 (그 후에는 대부분 일반 Win32 핸들처럼 행동합니다).

더 혼란스러운 유니 닉스는 "UNIX 소켓"또는 AF_UNIX 소켓이라고 불리는 것을 가지고 있으며, 이는 Win32 "Pipe"와 비슷하지만 양방향으로 작동합니다.

리눅스 파이프
먼저 첫 번째 (FIFO) 의사 소통 메커니즘을 해석합니다.

이름없는 파이프
"|"로 표시되는 명령 줄에서 두 명령 사이.

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

명령 줄에서 "mypipe"라는 이름의 파이프를 만들려면남자 페이지):

mkfifo myPipe  

"PathName"은 파이프에 원하는 이름이고 "모드"는 파이프에 원하는 권한을 포함하는 C에서 이름이 붙은 파이프를 만들려면남자 페이지):

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

에 따르면 위키 백과:

...] 전통적인 파이프는 익명으로 존재하며 프로세스가 실행되는 한 지속되기 때문에 "이름이 없다"고합니다. 이름이 지정된 파이프는 시스템이 정지되어 있으며 프로세스 수명을 넘어서 존재하며 더 이상 사용되지 않으면 "링크되지 않은"또는 삭제해야합니다. 프로세스는 일반적으로 IPC (프로세스 간 통신)를 수행하기 위해 일반적으로 명명 된 파이프 (일반적으로 파일로 표시)에 연결됩니다.

비교하다

echo "test" | wc

에게

mkdnod apipe p
wc apipe

WC는까지 차단됩니다

echo "test" > apipe

실행

파이프는 응용 프로그램간에 데이터를 스트리밍하는 방법입니다. Linux에서는이 시간을 항상 사용하여 한 프로세스의 출력을 다른 프로세스로 스트리밍합니다. 대상 앱은 입력 스트림의 출처가 어디에서 오는지 전혀 모르기 때문에 이것은 익명입니다. 필요하지 않습니다.

명명 된 파이프는 기존 파이프에 적극적으로 연결되어 데이터를 올리는 방법 일뿐입니다. 제공 업체가 데이터를 섭취 할 클라이언트를 모르는 상황입니다.

Windows 애플리케이션을위한 프로세스 간 통신 (주로). UNIX의 애플리케이션간에 소켓을 사용하는 것과 유사합니다.

MSDN

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

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

빠른 지역 지역 네트워크 (LAN) 환경에서 전송 제어 프로토콜/인터넷 프로토콜 (TCP/IP) 소켓 및 명명 된 파이프 클라이언트는 성능과 비교할 수 있습니다. 그러나 TCP/IP 소켓과 명명 된 파이프 클라이언트 간의 성능 차이는 WANS (Wide Area Networks) 또는 전화 접속 네트워크와 같은 느린 네트워크를 통해 명백 해집니다. 이는 IPC (Intervacess Communication) 메커니즘이 동료간에 통신하는 다양한 방법 때문입니다.

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

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

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

TCP/IP 소켓도 백 로그 큐를 지원합니다. 이렇게하면 SQL Server에 연결하려고 할 때 파이프 비스 오류로 이어질 수있는 이름의 파이프에 비해 제한된 평활 효과가 제공 될 수 있습니다.

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

UNIX/LINUX 컨텍스트의 명명 된 파이프는 쉘이 다른 것과 아무것도 공유 할 수 없기 때문에 통신하기 위해 두 개의 다른 쉘을 만드는 데 사용될 수 있습니다.

또한 동일한 쉘에서 두 번 인스턴스화 된 하나의 스크립트는 두 인스턴스를 통해 아무것도 공유 할 수 없습니다. start () 및 stop () 함수가 포함 된 데몬을 코딩 할 때 명명 된 파이프의 사용을 찾았으며 동일한 스크립트를 사용하여 두 동작을 수행하고 싶었습니다.

명명 된 파이프 (또는 어떤 종류의 세마포어)가 없으면 백그라운드에서 스크립트를 시작하는 것은 문제가되지 않습니다. 문제는 그것이 끝나면 배경으로 인스턴스에 액세스 할 수 없습니다.

따라서 그에게 스톱 명령을 보내고 싶을 때는 할 수 없습니다. 명명 된 파이프없이 동일한 스크립트를 실행하고 실제로 다른 인스턴스를 실행하기 때문에 아무것도하지 않습니다.

솔루션은 데몬을 시작할 때 두 개의 파이프를 구현하고 다른 하나는 읽기와 다른 하나는 읽기였습니다. 그런 다음 다른 작업 중에서도 읽기 파이프를 들으십시오. 그런 다음 stop () 함수에는 파이프에 메시지를 작성하는 명령이 포함되어 있으며,이 방법으로 동일한 스크립트의 두 번째 인스턴스는 다음과 같은 작업에만 사용됩니다. 첫 번째 인스턴스를 중지라고 말하십시오.

이런 식으로 하나의 스크립트 만 시작하고 스스로를 멈출 수 있습니다.

물론 당신은 예를 들어 터치를 통해 정지를 트리거하여 다른 방법을 가지고 있습니다. 그러나 이것은 코드에 좋고 흥미 롭습니다.

명명 된 파이프는 프로세스 간 통신을위한 Windows 시스템입니다. SQL Server의 경우 서버가 클라이언트와 동일한 컴퓨터에있는 경우 TCP/IP와는 달리 이름이 지정된 파이프를 사용하여 데이터를 트랜퍼 할 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top