더북(TheBook)

논블록 소켓에서는 상태 확인 후 뭔가를 합니다. Overlapped I/O에서는 일단 저지른 후 결과를 확인합니다. 그래서 논블록 소켓을 ‘뒤늦게…’라는 의미의 리액터 패턴(reactor pattern)이라고 합니다. Overlapped I/O는 ‘미리…’라는 의미의 프로액터 패턴(proactor pattern)이라고 합니다.

표 3-3을 참고하여 이 둘의 미묘한 차이를 기억해 둡시다.

▼ 표 3-3 리액터 패턴과 프로액터 패턴 비교

리액터

프로액터

논블록 소켓

Overlapped I/O

1. I/O를 시도한다(성공할 수도 있고 실패할 수도 있다).

2. 실패할 때는 I/O 가능을 기다린 후 I/O를 재시도한다.

3. 성공할 때는 상황을 종료한다.

1. I/O를 시행(무조건 성공)한다.

2. I/O 완료를 기다린다.

3. 상황을 종료한다.

리눅스, FreeBSD, iOS, 안드로이드 등에서 주로 사용된다. 윈도에서도 사용할 수 있으나 대세는 아니다.

윈도에서만 사용할 수 있다.

 

자, 이제 소켓 개수가 1만 개인 상황을 살펴봅시다. 리액터에서는 이렇게 해야 합니다.

1. 소켓 1만 개에 대해서 select를 호출합니다.

2. 각 소켓에서 루프를 돌며 I/O를 시도합니다(이 루프를 도는 것은 성능 문제로 이어집니다).

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.