posted by 방랑군 2012. 1. 18. 23:02

select 함수 원형

#include <sys/types.h> <sys/time.h> <unistd.h>

int select(int n, fd_set *readfd, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout);

 

어느 교실에 학생들이 열명이 있다.

 

선생님은 한 분이신데 수업시간 내내 각각의 학생이 선생님께 질문을 한다. 그래서 이 학교에서는 어쩔 수 없이 학생 한명당 교사 한 명을 두게 하였다.  따라서 현재 교사가 총 열 명이다. 한 학생이 전학을 오면 교사도 한 명 늘리고, 두 명의 학생이 전학을 오면 교사도 두 명을 더 늘린다. 전학을 온 녀석들도 쉴새없이 질문을 한다.

 

'학생 - 클라이언트', '선생님 - 서버' 라고 생각해 보면, 이 반의 운영 방식은 멀티 프로세스(멀티 스레드) 기반으로 돌아가고 있다는 것을 알 수 있다.

 

시간이 지남에 따라 학생들의 궁금점은 해소되었고, 질문의 수가 갑자기 줄어들어 버렸다. 한 시간에 학생 한 명당 질문 수가 많아야 세 번을 넘지 않는다. 그래서 학교측에서는 그 정도면 한 명의 교사가 충분히 담당을 할 수 있다고 생각을 하고, 효율적인 교사의 활용을 위해서 한 명의 교사만 그 반에 할당하기로 결정하였다.

 

이제 학생들은 질문을 하기 위해서 손을 들어야 하고, 교사는 손을 든 학생이 있는지 없는지 확인하다가 손을 든 학생이 있다면 질문을 받게 될 것이다.

 

이러한 경우의 운영 방식은 'I/O 멀티플렉싱' 방법이다. 서버는 주기적으로 데이터를 전송해오는 클라이언트가 있는지 확인을 하다가, 발견한 경우에, 그 클라이언트로부터 데이터를 수신한다.

 

비교해 보면, 멀티 프로세스 기반 서버 모델이 적합한 경우와 I/O 멀티플렉싱 기반 서버 모델이 적합한 경우가 다르다는 것을 짐작할 수 있을 것이다.

'강좌 > C#' 카테고리의 다른 글

Thread vs ThreadPool  (0) 2012.01.18
마샬링 (Marshaling)  (0) 2012.01.18
멀티 스레딩 서버 vs 멀티 플렉싱 서버의 장단점 + UDP VS TCP  (0) 2012.01.18
멀티플렉싱(multiplexing)  (0) 2012.01.18
Stream, Dgram 설명  (0) 2012.01.18