명명 된 파이프는 무엇입니까?
무엇이며 어떻게 작동합니까?
SQL Server입니다.
Windows 및 POSIX 시스템 모두에서 명명 된 파이프는 동일한 시스템에서 실행되는 프로세스간에 프로세스 간 통신을 수행 할 수있는 방법을 제공합니다. 명명 된 파이프가 제공하는 것은 네트워크 스택과 관련된 성능없이 데이터를 전송하는 방법입니다.
요청 요청에 대해 IP 주소 / 포트를 수신하는 서버가있는 것처럼 서버는 요청을 수신 할 수있는 명명 된 파이프를 수도 있습니다. 두 경우 모두 클라이언트 프로세스 (또는 DB 액세스 라이브러리)는 요청을받을 특정 주소 (또는 파이프 이름)를 필요로합니다. (HTTP의 포트 80과 사용하는 경우 SQL Server는 TCP / IP의 포트 1433을 사용하고 명명 된 파이프의 경우 \\. \ pipe \ sql \ query를 사용합니다.)
추가 고유 명명 된 파이프를 설정하면 각각 한 요청 리스너를 가진 여러 DB 서버를 사용할 수 있습니다.
명명 된 파이프의 장점은 일반적으로 훨씬 빠르며 네트워크 스택 리소스를 확보한다는 것입니다.
-BTW, Windows 환경에서는 명명 된 파이프를 원격 시스템으로 사용하고 명명 된 파이프는 TCP / IP를 통해 전송되는 성능이 있습니다. 로컬 머신 통신에는 명명 된 파이프를 사용하십시오.
유닉스와 윈도우는 모두 "명명 된 파이프"라는 것을 다르게 동작합니다. 유닉스에서 명명 된 파이프는 일반적으로 단 하나의 독자와 작가가있는 단방향 도로입니다. 작가는 글을 쓰고 독자는 읽습니다.
Windows에서 "명명 된 파이프"라는 소켓 소켓과 IPC입니다. 두 가지 방식으로 모두 흐를 수있는 메타 데이터가 있습니다 (다른 쪽에서 해당 자격 증명을받을 수 있음).
유닉스 명명 된 파이프는 파일 시스템에서 특수 파일로 나타나며 쉘을 포함하는 일반 파일 IO 명령으로 액세스 할 수 있습니다. Windows는 특별한 시스템 호출로 열리지 배치하며 (그 후에는 보통 win32 핸들과 같이 동작합니다).
더 혼란스러운 Unix는 "Unix socket"또는 AF_UNIX 소켓이 있는데, 이는 win32 "named pipe"와 유사하지만 상호 작동합니다.
FIFO ( Linux Pipes First In First Out) 프로세스 간 통신 기술.
명명되지 않은 파이프
명령 행에서 "|" 두 명령 사이.
명명 된 파이프
FIFO 특수 파일. 일단 생성되면 파이프를 일반 파일 (열기, 닫기, 쓰기, 읽기 등)처럼 사용할 수 있습니다.
명령 행 ( 사람 페이지 ) 에서 "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
실행
파이프는 응용 프로그램간에 데이터를 스트리밍하는 방법입니다. 리눅스에서는 한 프로세스의 출력을 다른 프로세스로 스트리밍하기 위해 항상 사용합니다. 대상 앱은 입력 스트림의 출처를 확인합니다. 필요하지 않습니다.
명명 된 파이프는 기존의 파이프에 후킹 업 데이터를하는 방법이다. 제공자가 어떤 클라이언트가 데이터를 먹을지 알지 못하는 상황을위한 것입니다.
Windows 응용 프로그램의 프로세스 간 통신 (주로) 소켓을 사용하여 Unix의 응용 프로그램간에 유사합니다.
이것은 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 또는 전화 접속 네트워크에서 선호되는 반면, 명명 된 파이프는 더 많은 기능, 사용 편의성 및 구성 옵션을 제공하지 않을 때 더 나은 선택이 될 수 없습니다. .
유닉스 / 리눅스 시나리오에서 명명 된 파이프는 두 개의 다른 쉘을 통신하는 데 사용할 수 있습니다. 쉘은 다른 쉘과 아무것도 공유 할 수 없기 때문입니다.
또한 동일한 셸에서 두 번 인스턴스화 된 하나의 펼쳐는 두 인스턴스를 통해 아무것도 공유 할 수 없습니다. start () 및 stop () 함수를 포함하는 데몬을 코딩 할 때 명명 된 파이프에 대한 사용을 발견하고 동일한 펼쳐를 사용하여 두 작업을 수행하고 싶었습니다.
명명 된 파이프 (또는 모든 종류의 세마포어)없이 백그라운드에서 시작하는 문제가 없습니다. 문제는 완료 백그라운드에서 인스턴스에 액세스 할 수있는 것입니다.
따라서 그에게 stop 명령을 보내고 싶을 때 할 수 없습니다. 이름이 지정된 파이프없이 동일한 펼쳐를 실행하고 중지 () 함수를 호출하면 실제로 다른 인스턴스를 실행하고 있기 때문에 아무 작업도 수행하지 않습니다.
해결은 데몬을 시작할 때 하나는 READ이고 다른 하나는 WRITE의 두 파이프를 구현하는 것이 었습니다. 그런 다음 다른 작업 중에서 READ 파이프를 들으십시오. 그런 다음 Stop () 함수는 파이프에 메시지를 작성하는 명령을 포함합니다.이 명령은 종료 0을 수행하는 백그라운드 실행 펼쳐에 의해 처리됩니다. 이렇게하면 펼쳐지는 두 번째 인스턴스가 수행 할 작업 만 있습니다. 첫 번째 인스턴스에게 중지하라고합니다.
이렇게하면 하나의 펼쳐 만 시작하고 중지 할 수 있습니다.
물론 예를 들어 터치를 통해 정지를 트리거하는 방식으로 수행 할 수있는 다른 방법이 있습니다. 그러나 이것은 코드에 멋지고 흥미 롭습니다.
명명 된 파이프는 프로세스 간 통신을위한 Windows 시스템입니다. SQL 서버의 경우 서버가 클라이언트와 같은 시스템에 TCP / IP와 달리 명명 된 파이프를 사용하여 데이터를받을 수 있습니다.
참고 URL : https://stackoverflow.com/questions/175579/what-are-named-pipes
'IT' 카테고리의 다른 글
$ _POST를 사용하여 HTML에서 선택 옵션 값 가져 오기 (0) | 2020.07.09 |
---|---|
현재 편집 src 파일을 찾기위한 Android Studio의 바로 가기 (0) | 2020.07.09 |
기본 Vim 색상 구성표를 설정하는 방법 (0) | 2020.07.09 |
셔플 링에 JavaScript Array.sort () 메소드를 사용하는 것이 맞습니까? (0) | 2020.07.08 |
C #은 JavaScript의 encodeURIComponent ()와 동등합니까? (0) | 2020.07.08 |