2013년 1월 25일 금요일

Select() 입출력 다중화

참고
Joinc: select를 이용한 입출력 다중화


입출력 다중화는 단일 프로세스에서 여러개의 파일을 제어할수 잇도록 한다.
입출력 다중화는 "비동기/ 봉쇄입출력 모델"

입출력 다중화는 여러개의 파일을 다루기 위해서 파일기술자를 배열(그룹)으로 관리한다.
개발자는 배열의 값을 검사하는것으로 여러개의 파일을 처리할수잇게된다.

입출력 다중화의 모델의 제한

1. 파일기술자 테이블의 크기 처리할수 잇는 파일의 최대크기는
프로세서가 열수 있는 파일의 최대개수와 별도로 "파일 기술자 테이블의 크기"에 영향을 받느다.
일반적으로 파일 기술자 테이블의 크기는 1024인데 , ulimit(1)등으로 변경할수없다.(?잉 변경할수 없는건가요? -_- 찾아보세요~)
(파일기술자 단일비트필드 테이블이라는것에 주목 변경해야할 필드가 있다면 1을 리턴한다.
그렇다면 111111..111로 AND연산을 하는것인가?)

2. 배열로써 가지는 성능 문제 이벤트 기반이 아니기 때문에
배열을 순차적으로 모든값을 전부검사해야한다.
만약 1000개의 클라이언트가 연결되어있고, 이중 어느 하나에 데이터변경이
이뤄졌다면 최악의 경우 1000개의 필드 모두 검사해야하는...문제가
(연결파일의 목록을 별도의 배열에 유지하는것으로 어느정도 문제를 해결할수 잇기는 하다.-=
완전한 방법은 아니다. 연결된 파일이 하나고 이 파일의 지정번호가 1000이라면
1번만 비교할수있지만 , 연결된 파일이 1000이라면 여전히 1000번의 루프를 돌아야한다. ㅠㅠ)

3. 병렬처리가 아니다. 이 모델은 멀티스레드와 병렬처리가 아니다.
데이터를 읽어서 처리하는 응답시간"동안 다른파일은 대기해야하므로
데이터 처리 과정이 긴 서비스에는 적용하기에는 적당한 모델이 아니다.
즉 데이터처리과정이 짧은 메시지 전달 서비스에 적합한 모델이라는것.

이러한 단점이 있지만 매우 견고한 모델이며, 프로그래밍 기술이 단순하기 때문에
널리 사용되고있다.

댓글 없음:

댓글 쓰기