더북(TheBook)

안타깝게도 RAM은 느린 부품입니다. CPU 안에 있는 캐시 메모리에 메모리 내용이 복사되어 있으면 데이터 액세스는 매우 빠릅니다. 하지만 캐시에 없는 데이터를 액세스할 때는 메인 메모리 RAM을 액세스하는데, 이 속도는 매우 느립니다. 물론 하드디스크나 네트워크 데이터보다는 빠르겠지만요. 따라서 고성능 서버를 개발할 때는 이 복사 연산도 무시할 수 없는 변수인 셈입니다.

지금까지 설명한 것을 한꺼번에 해결하는 기법이 Overlapped 또는 Asynchronous(비동기) I/O입니다. 이는 재시도용 호출 낭비 문제와 소켓 함수에 데이터 블록 복사 부하 문제를 모두 해결해 줍니다.

앞서 본 논블록 소켓은 다음 데이터를 다룹니다.

1. 소켓이 I/O 가능인 것이 있을 때까지 기다립니다.

2. 소켓에 대해 논블록 액세스를 합니다.

3. would block이 발생했으면 그대로 두고, 그렇지 않으면 실행 결과 리턴 값을 처리합니다.

Overlapped I/O에서는 다르게 합니다.

1. 소켓에 대해 Overlapped 액세스를 “겁니다.”

2. Overlapped 액세스가 성공했는지 확인한 후 성공했으면 결괏값을 얻어 와서 나머지를 처리합니다.

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