본문 바로가기

컴퓨터61

Reactor / Proactor 패턴 Event Handling PatternI/O 이벤트 통지방식의 기본을 배웠다. 좀더 깊은 이해를 위해 원론적인 부분을 생각할 시간이 필요하다. 이벤트 핸들링 패턴을 보면서 그 내용을 따라가 보자. 우선 이벤트 핸들링에는 몇 가지 주요 동작이 있다.이벤트 핸들링을 위한 객체들을 초기화(Intiate)하고,여러 통로에서 들어오는 이벤트들을 수신(recieve)하고,이벤트들을 대응할 객체별로 분할하고(demultiplex),개체에게 이벤트를 발송(dispatch)해서,그 개체가 이벤트에 걸맞는 작업을 수행(process events)한다.이 일련의 동작으로 동시다발적으로 들어오는 각각의 입력에 대해서 적절한 대응을 수행할 수 있다. 다양한 방법으로 이 추상적인 패턴을 구현하는 것이 가능하다.Reactor 패.. 2015. 4. 12.
Modern Effective C++ Item 17 : 자동 생성 함수 in C++11 특수 멤버함수 자동 생성 in C++11특수 멤버함수 자동 생성 in C++ 98이펙티브 C++에서 말한 것처럼, 컴파일러가 프로그래머 몰래 만드는 함수들이 있다. 클래스에게 기본적인( 생성자, 소멸자, 복사생성자, 복사 대입 연산자 )함수들이 필요할 때, 사용자가 해당 함수를 정의하지 않았다면 컴파일러가 유저의 편의를 위해 자동으로 만들어 준다. 이 말인 즉, 정의한다면 자동 생성함수가 만들어지지 않는다는 뜻이다.이런 자동 생성 멤버함수들을 Scott Meyers는 특수 멤버함수(Special Member Function)라고 말한다. 이런 특수멤버함수들이 자동으로 생성되면 public, inline형태로 선언되고, 각 비정적 멤버 변수의 해당 함수(생성자, 소멸자, 복사 생성자, 복사 대입 연산자)를.. 2015. 4. 8.
windows IOCP 기초 IOCP 개념 싱글 쓰레드로는 부족해 이전 게시물까지 이야기 했던 통지모델들은 싱글쓰레드 멀티플렉싱을 위한 확장처럼 보였다. 하지만 싱글쓰레드 스마트폰도 보기 힘든 2015년 현재, 굳이 하이엔드 스펙을 갖춘 서버에서 싱글쓰레드를 써야할까? 이전 멀티쓰레드형 서버의 문제는 컨텍스트 스위칭 비용이었다. 하지만 CPU개수만큼만 쓰레드를 사용한다면, 컨텍스트 스위칭 문제는 크게 문제가 되지 않는다. 그러니까 우리는 딱 CPU개수만큼만 쓰레드를 쓰는 서버를 만들고 싶다. 이 막연한 희망사항에 긍정적으로 대답해주는 것이 바로 윈도우의 IOCP이다. 어떻게 구현할 것인가? 수많은 I/O 요청속에서 딱 CPU 개수만큼만 쓰레드를 사용하여 처리한다는게 말이 쉽지 땅파면 나오나? 어떻게 만들 것인가? 일단 생각나는 대로.. 2015. 4. 6.
Window I/O 통지모델 : WSAAsyncSelect , WSAEventSelect, Overlapped I/O WSAAsyncSelect 비동기 SelectWSAAsyncSelect(이하 WAS)는 윈도우 운영체제에서 제공하는 socket용 통지모델이다. 대놓고 Async를 표방한만큼 지금까지 앞에서 언급했던 동기형 통지모델과 다른 방식으로 통지를 해준다. 사용자가 커널의 상황을 지속적으로 확인하며 통지를 받는 것이 아니라, 특정 상황이 되면 통지를 주도록 예약을 하는 것이다. 그야말로 비동기 통지방식이다. 기존 Select가 확인하던 I/O 상태변화에 대해서 소켓별로 WAS를 사용하여 등록을 하면 윈도우 메시지를 통해서 통지가 된다. 그래서 둘이 합쳐 Async Select이다. 통지 방식으로 윈도우 메시지를 사용하는 만큼 WAS는 윈도우 프로시저에서만 사용할 수 있다.리눅스의 동기 형식의 통지방식은 다수의 f.. 2015. 3. 29.