Young & Rich

오늘은 네트워크 I/O 방법론에 대해서 포스팅을 해보도록 하겠습니다.

 

[ Blocking 방식 ]

Application이 read를 호출할 때, 커널에 데이터가 들어올 때까지 blocking 시킨 후,

데이터가 들어올 때 Application으로 process가 돌아오게 됩니다.
예외처리가 필요한 경우 Blocking 되므로 위험합니다.

 

Blocking Model
Blocking Model

 

[ Non-Blocking 방식 ]

on-Blocking 방식은 Application이 Read를 하게되면 데이터가 있는지 없는지 return 해줍니다.
Data가 없는 경우 없다고 return을 하며 있는 경우 Data 를 copy하여 전송해줍니다.
하지만, Busy Polling을 통한 방식으로 리소스가 많이 소요됩니다.

 

Non-Blocking Model
Non-Blocking Model

[ 멀티플렉싱 방식 ]

FD_ZERO(fd_set *fdset)

FD_SET(int fd, fd_set *fdset)

Select(int max, fd_set *readset, fd_set *writeset, fd_set *exceptset, const struct timeval *timeout)

FD_ISSET(int fd, fd_set *fdset)

 

  1. FD_ZERO : 인자로 전달된 주소의 fd_set형 변수의 모든 비트를 0으로 초기화
  2. FD_SET : 매개변수 fdset으로 전달된 주소의 변수에 매개변수 fd로 전달될 파일 디스크립터 정보를 등록
  3. Select : 순신된 데이터의 존재여부에 관심 있는 파일 디스크립터 정보를 모두 등록, Timeout 등록
  4. FD_ISSET : 매개 변수 fdset으로 전달된 주소의 변수에 매개변수 fd로 전달된 팡리 디스크립터 정보가 있으면 양수를 리턴(Data가 있으면 양수를 리턴) 

멀티플렉싱
멀티플렉싱

 

3가지의 I/O 방법론에 대해서 설명해보았습니다.

 

다음에는 select 함수 예제 및 사용방법을 포스팅하도록 하겠습니다.

 

그럼 20000.

 

이 글을 공유합시다

facebook twitter googleplus kakaoTalk kakaostory naver band