본문 바로가기

기초지식 정리 가상함수 - 어떤 메소드를 실제로 호출하는 객체가 어떤 클래스인지에 따라 구현이 결정되는 메소드를 뜻한다. class A { public: virtual void print() { cout print(); // "C" * 가상함수의 장점 : - 1. 실행시에 메소드를 선택할수 있다는 점. - 2. 추상메소드로 사용되며 다형성을 구현할수 있다는 점. class Bird{ public: virtual void fly() = 0; }; class Bidulgi : Bird { public: virtual void fly(){ cout fly(); * 가상함수의 단점 : 별도의 메모리의 사용, 오버헤드 - virtual 이란 키워드가 한개라도 붙은 클래스의 객체를 선언할경우, 그 클래스만을 위한 vtable( .. 더보기
IOCP 정리 IOCP ( Input Output Completion Port ) * 입출력 완료 포트 주요 개념 * 비동기 입출력 모델( Overlapped I/O ) * 여러 소켓들의 입출력을 적은 수의 쓰레드가 담당하게 하여 스레드간의 컨텍스트 스위칭을 줄이는 모델. * 읽기와 쓰기에 대한 IO를 먼저 수행하고 완료되었을때 통지(확인) 받는다. 1. completion port 생성 HANDLE completionPort = ::CreateIoCompletionPort( INVALID_HANDLE_VALUE, 0, 0, 0); 2. 서버 listen 소켓 생성후 listen SOCKET listen_sock = WSASocket( PF_INET, SOCK_STREAM, 0, NULL, 0, WSA_FLAG_OVE.. 더보기
SELECT 함수 정리 SELECT 함수는 멀티플렉싱 방식의 IO 모델이다. 즉 한 프로세스에서 여러개의 소켓을 관리하는 방식인데, 관심을 두고 싶은 소켓을 각각의 셋트( 읽기, 쓰기, 예외 )에 넣어서 변화를 감시하고, 변화가 일어났을때 IO 를 하는 방식이라는 것이다. 한마디로 풀어보자면, IO를 하라는 통지가 먼저 일어나고, 그 통지에 의한 각각의 IO 처리를 진행하는 방식이다. 리눅스 기반과 윈도우즈 기반의 SELECT 함수는 같지만 작동 원리가 약간 틀리다. 리눅스 기반부터 살펴보자. 리눅스의 fd_set 구조체 typedef struct { __fd_mask __fds_bits[__FD_SETSIZE / __NFDBITS]; } fd_set; __FD_SETSIZE 가 결정 하는듯한데. ulimit -a 에서 ope.. 더보기