prosource

이름이 붙은 파이프는 무엇입니까?

probook 2023. 4. 23. 10:35
반응형

이름이 붙은 파이프는 무엇입니까?

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

컨텍스트는 SQL Server입니다.

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

착신 요구를 수신하는 IP 주소/포트를 수신하는 서버가 있는 경우와 마찬가지로, 서버는 요청을 수신할 수 있는 이름 있는 파이프를 설정할 수도 있습니다.두 경우 모두 클라이언트 프로세스(또는 DB 액세스 라이브러리)가 요청을 전송하려면 특정 주소(또는 파이프 이름)를 알아야 합니다.일반적으로 사용되는 표준 디폴트값이 존재하는 경우가 많습니다(HTTP의 경우 포트 80, SQL Server는 TCP/IP의 포트 1433, 이름 있는 파이프의 경우 \.\pipe\sql\query 등).

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

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

-- BTW, Windows 세계에서는 리모트 머신에 파이프 이름을 붙일 수도 있지만, 이 경우 명명된 파이프는 TCP/IP를 통해 전송되므로 성능이 저하됩니다.로컬 컴퓨터 통신에 명명된 파이프를 사용합니다.

Unix 와 Windows 는 모두 「네임드 파이프」라고 불리는 것을 가지고 있습니다만, 동작은 다릅니다.Unix에서 명명된 파이프는 일반적으로 한 명의 리더와 한 명의 라이터만 있는 일방통행 도로입니다. 라이터는 쓰고, 독자는 읽습니다. 알겠습니까?

Windows 에서는, 「Named pipe」라고 불리는 것은, TCP 소켓에 가까운 IPC 오브젝트입니다.이것들은 양방향으로 흐를 수 있고 메타데이터도 몇개 있습니다(다른 한쪽 끝의 credential을 취득할 수 있습니다).

UNIX 이름 있는 파이프는 파일 시스템에 특수 파일로 표시되며 셸을 포함한 일반 파일 IO 명령을 사용하여 액세스할 수 있습니다.Windows 의 경우는 그렇지 않기 때문에, 특별한 시스템 호출로 열 필요가 있습니다(그 후, 통상의 win32 핸들처럼 동작합니다).

더욱 혼란스러운 것은 유닉스에는 "유닉스 소켓" 또는 AF_라고 불리는 것이 있다는 것입니다.UNIX 소켓: 양방향 win32 "이름붙인 파이프"와 더 비슷하지만 완전히 비슷하지는 않습니다.

PipesLinux 파파 linux
First In First Out(FIFO; First Out)입니다.

없는 파이프
명령줄에서 두 명령어 사이에 "|"로 표시됩니다.

된 파이프(Pipes)
FIFO " " " "작성된 파이프는 일반 파일(열기, 닫기, 쓰기, 읽기 등)과 동일하게 사용할 수 있습니다.

명령줄(man 페이지)에서 "myPipe"라는 명명된 파이프를 작성하려면:

mkfifo myPipe  

c에서 명명된 파이프를 작성하려면 다음 절차를 수행합니다. 여기서 "pathname"은 파이프에 포함할 이름이고 "mode"는 파이프에 부여할 권한을 포함합니다(man 페이지).

#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

실행하다

이것은 Technet의 전문입니다(표시된 답변이 명명된 파이프가 더 빠르다고 하는 이유를 알 수 없습니다).?):

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

고속 로컬 에리어 네트워크(LAN) 환경에서는 Transmission Control Protocol/Internet Protocol(TCP/IP) 소켓과 명명된 파이프 클라이언트는 퍼포먼스에 관해 동등합니다.다만, TCP/IP 소켓클라이언트와 명명된 파이프클라이언트의 퍼포먼스 차이는, Wide Area Network(WAN; 와이드 에리어 네트워크)나 다이얼 업 네트워크 등, 저속 네트워크에서는 명확하게 나타납니다.이것은, Interprocess Communication(IPC; 프로세스간 통신) 메카니즘이 피어간에 통신하는 방법이 다르기 때문입니다.

명명된 파이프의 경우 일반적으로 네트워크 통신이 더 인터랙티브합니다.다른 피어가 read 명령어를 사용하여 데이터를 요구할 때까지 피어는 데이터를 전송하지 않습니다.일반적으로 네트워크 읽기에는 데이터 읽기를 시작하기 전에 일련의 Peek 명명 파이프 메시지가 포함됩니다.저속 네트워크에서는 비용이 많이 들고 과도한 네트워크트래픽이 발생하여 다른 네트워크클라이언트에 영향을 줄 수 있습니다.

로컬 파이프와 네트워크 파이프 중 어느 쪽을 말하는지도 명확히 하는 것이 중요합니다.서버 응용 프로그램이 SQL 서버 인스턴스를 실행하는 시스템에서 로컬로 실행 중인 경우 로컬 명명된 파이프 프로토콜이 옵션입니다.로컬 이름 있는 파이프는 커널 모드로 실행되며 매우 빠릅니다.

TCP/IP 소켓의 경우 데이터 전송이 보다 합리화되고 오버헤드가 줄어듭니다.데이터 전송에서는, TCP/IP 소켓의 퍼포먼스 향상 메카니즘(윈도 설정, 지연 확인 응답 등)을 이용할 수도 있습니다.이것은, 네트워크 속도가 느린 경우에 매우 도움이 됩니다.애플리케이션의 종류에 따라서는, 이러한 퍼포먼스의 차이가 큰 경우가 있습니다.

TCP/IP 소켓은 백로그 큐도 지원합니다.따라서 SQL Server에 연결하려고 할 때 파이프 비지 오류가 발생할 수 있는 명명된 파이프에 비해 제한된 스무딩 효과를 얻을 수 있습니다.

일반적으로 저속 LAN, WAN 또는 다이얼 업 네트워크에서는 TCP/IP가 권장되지만 네트워크 속도가 문제가 되지 않을 때는 더 많은 기능, 사용 편의성 및 구성 옵션을 제공하기 때문에 명명된 파이프가 더 적합합니다.

파이프는 애플리케이션 간에 데이터를 스트리밍하는 방법입니다.Linux에서는 한 프로세스의 출력을 다른 프로세스로 스트리밍하기 위해 항상 이 기능을 사용합니다.대상 앱은 입력 스트림이 어디서 왔는지 알 수 없기 때문에 익명입니다.그럴 필요 없어요.

명명된 파이프는 기존 파이프에 능동적으로 연결하고 데이터를 후버업하는 방법입니다.프로바이더가 어떤 클라이언트가 데이터를 사용할지 모르는 상황을 위한 것입니다.

Windows 애플리케이션의 프로세스간 통신(대부분).Unix 의 애플리케이션간에 통신하기 위해서 소켓을 사용하는 것과 비슷합니다.

MSDN

unix/linux 컨텍스트에서 명명된 파이프를 사용하여 서로 다른 두 개의 셸을 만들어 통신할 수 있습니다. 셸은 다른 셸과 아무것도 공유할 수 없기 때문입니다.

또한 동일한 셸에서 인스턴스화된1개의 스크립트는 2개의 인스턴스를 통해 아무것도 공유할 수 없습니다.start() 및 stop() 함수를 포함하는 데몬을 코딩할 때 명명된 파이프의 용도를 발견했으며, 두 가지 작업을 수행하기 위해 동일한 스크립트를 사용하고 싶었습니다.

명명된 파이프(또는 세마포)가 없는 경우 백그라운드에서 스크립트를 시작하는 것은 문제가 되지 않습니다.중요한 것은 이 작업이 완료되면 백그라운드에서 인스턴스에 액세스할 수 없다는 것입니다.

따라서 stop 명령어를 전송하고 싶을 때 이름 있는 파이프 없이 동일한 스크립트를 실행하고 stop() 함수를 호출해도 실제로는 다른 인스턴스를 실행하고 있기 때문에 아무것도 할 수 없습니다.

데몬을 시작할 때 READ와 WRITE 두 개의 파이프를 구현하는 것이 해결책이었습니다.그런 다음 다른 작업 중에서도 READ 파이프를 듣게 합니다.다음으로 Stop() 함수에 파이프에 메시지를 쓰는 명령어가 포함되어 있습니다.이 명령어는 exit 0을 실행하는 백그라운드 실행 스크립트에 의해 처리됩니다.이와 같이 동일한 스크립트의 두 번째 인스턴스는 작업만 수행하면 됩니다. 첫 번째 인스턴스는 중지하도록 지시합니다.

이렇게 하면 하나의 스크립트만 자동으로 시작하고 중지할 수 있습니다.

물론 예를 들어 터치를 통해 정지를 트리거하는 등 다양한 방법이 있습니다.하지만 이것은 코드화하기에 좋고 흥미롭습니다.

명명된 파이프는 프로세스 간 통신을 위한 윈도우 시스템입니다.SQL 서버의 경우 서버가 클라이언트와 같은 머신 상에 있는 경우 TCP/IP가 아닌 이름 있는 파이프를 사용하여 데이터를 전송할 수 있습니다.

언급URL : https://stackoverflow.com/questions/175579/what-are-named-pipes

반응형