네트워크 프로그래밍의 I/O 모델
I/O 재사용
커널에서 프로세스가 지정한 입출력 조건이 하나 이상 준비된 것을 발견하면 프로세스에 알립니다.
I/O 재사용이 필요한 이유
시작 전 주의 사항
하나의 입력 작업은 두 단계로 나뉜다. 하나는 데이터 준비를 기다리는 단계이고, 하나는 내부 핵에서 프로세스로 데이터를 복사하는 단계이다.
다섯 가지 입출력 모델
입출력 차단(상용) 모델
프로세스가 recvfrom () 을 호출하여 데이터를 읽으면, 프로세스는 recvfrom (시스템 호출) 을 호출하기 시작해서 돌아오는 시간 동안 막힙니다. 성공적으로 되돌아와야만 프로세스가 데이터를 처리할 수 있습니다.
비차단 I/O 모델
프로세스가 recvfrom을 호출할 때 데이터 보고가 준비되지 않으면 커널이 바로 EWOULDBLOCK 오류로 되돌아옵니다. 응용 프로세스는 끊임없이 recvfrom를 호출합니다. 이 프로세스를 폴링(polling)이라고 합니다. 이렇게 하면 CPU 시간이 많이 소모됩니다. 보통 특정한 기능을 제공하는 시스템에서만 가능합니다.
입출력 재사용 모델
프로세스가 select (poll) 를 호출하고 이 두 시스템이 호출하는 것을 막습니다.
예를 들어 select(poll)와recvfrom을 사용할 때, select가 플러그인 인터페이스로 이 조건을 읽을 수 있을 때,recvfrom를 호출하여 읽은 데이터를 프로세스 버퍼로 복사합니다.
여러 개의 설명자가 준비될 때까지 기다릴 수 있다는 장점이 있다.다중 스레드에서 입출력 차단을 사용하는 것과 유사합니다.
신호 제어 I/O 모델
신호를 사용하여 커널이 설명자가 준비되었을 때 SICIO 신호 알림 프로세스를 보냅니다.
비동기식 입출력 모델
프로세스는 커널이 어떤 조작을 시작한다고 알려주면 되돌아오고 커널이 전체 조작을 진행하며 조작이 끝난 후에 프로세스에 알려줍니다!(POSIX 비동기식 I/O 함수는 aio_ 또는 lio_로 시작), 막히지 않습니다!
비교하다
앞의 네 가지 모델은 주로 1단계(데이터 준비 대기)와 다르고 2단계는 읽기 과정, 반 막힌다.
그래서 앞의 네 가지 모델은 동기화 I/O 모델이라고 불리는데 그 진정한 I/O 작업은 프로세스를 막는다!
I/O 재사용:select 함수와poll 함수
프로세스가 여러 이벤트 중 하나를 기다리는 프로세스를 표시하고, 한 개 이상의 이벤트가 발생하거나 지정된 시간이 지나야만 깨울 수 있습니다!
#include
#include
int select(int maxfdp1, fd_set * readset, fd_set * writeset,
fd_set * exceptset, const struct timeval * timeout);
: ,0- ,-1-
#include
int poll(struct pollfd * fdarra, unsigned long nfds, int timeout);
: ,0- ,-1-
참고 자료
UNIX 네트워크 프로그래밍 1권: Interface API(3판)
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.