목록Categories (1099)
KoreanFoodie's Study
Asio 는 Asynchronous IO 의 약자이다. Asio 를 이해하기 위해서는, 다음과 같은 용어들을 알고 있어야 한다. IO Service 클래스 : 커널에서 발생한 입출력 이벤트를 디스패치 해주는 기능을 수행. 디스패치란, 우선순위가 높은 작업이 우선적으로 수행될 수 있도록 시스템 자원을 할당하는 것을 의미한다. IO Service 클래스는 커널에서 발생한 네트워크상의 접속 및 데이터 처리 이벤트를 처리한다. 종단점(Endpoint) : 네트워크 상의 특정 컴퓨터에서 실행되고 있는 하나의 프로그램. 구체적으로 IP 주소와 포트 번호의 한 쌍을 종단점이라고 함. DNS(Domain Name Server) : Boost Asio 에서는 도메인 주소를 이용, IP 주소를 알아내어 종단점을 구한다. ..
IOCP는 CPU 개수만큼만 쓰레드를 쓰는 서버이다. IOCP 를 사용한 모든 Send/Recv 는 Overlapped I/O 로 동작한다. 멀티쓰레드에서 동작하며, 콜백함수들을 동시에 동작해서 성능을 높인다. IOCP가 사용하는 IOCP 객체는 커널 안에서 관리된다. 커널 내에는 DEVICE LIST 라는 자료구조가 존재하는데, 소켓을 IOCP 에 등록하면 IOCP 객체는 DEVICE_LIST 에 소켓들을 등록해서 처리한다. 프로그래머는 DEVICE_LIST 를 직접 보거나 제어할 수 없다. 흐름을 다음과 같이 요약해 볼 수 있을 것 같다 : I/O 디바이스(소켓, FD) IOCP 에 등록 : CreateIoCompletionPrt 함수를 통해 디바이스와 CompletionPort(이하 CP) 를 바인..
이득우님의 '이득우의 게임수학' 책을 보며 좋은 내용을 정리하고 있습니다. 더 자세한 내용이 궁금하시다면, 책을 구매해 직접 읽어보시기를 추천드립니다! 변환 행렬의 역행렬 다양한 변환 행렬들의 역행렬을 알아보자. 크기 변환행렬 각 기저벡터의 크기를 각각 a, b 만큼 키우는 크기 변환행렬의 역행렬은 다음과 같다. 전단 변환행렬 평행사변형 처럼 미끄러지게 생긴 전단 변환행렬의 역행렬은 다음과 같다. 회전 변환행렬 회전 변환행렬의 역행렬은 다음과 같다. θ 만큼 반시계 방향으로 회전시키는 행렬의 역행렬을 구하기 위해서는, -θ 만큼 반시계 방향으로 회전시키는 행렬을 생각해보면 된다! 삼각함수의 성질을 이용하면 간단히 구할 수 있다.
약 두 달간 읽으며 정리하고 요약한 Effective C++ 와 Effective Modern C++ 게시글들에 대한 리스트 요약글입니다. 개발하실때 참고하시길 바라며, 직접 사서 읽어보시길 강추드립니다! 1장 형식 연역 항목 1: 템플릿 형식 연역 규칙을 숙지하라 항목 2: auto의 형식 연역 규칙을 숙지하라 항목 3: decltype의 작동 방식을 숙지하라 항목 4: 연역된 형식을 파악하는 방법을 알아두라 2장 auto 항목 5: 명시적 형식 선언보다는 auto를 선호하라 항목 6: auto가 원치 않은 형식으로 연역될 때에는 명시적 형식의 초기치를 사용하라 3장 현대적 C++에 적응하기 항목 7: 객체 생성 시 괄호(())와 중괄호({})를 구분하라 항목 8: 0과 NULL보다 nullptr를 선..
약 두 달간 읽으며 정리하고 요약한 Effective C++ 와 Effective Modern C++ 게시글들에 대한 리스트 요약글입니다. 개발하실때 참고하시길 바라며, 직접 사서 읽어보시길 강추드립니다! Chapter 1 C++에 왔으면 C++의 법을 따릅시다 항목 1: C++를 언어들의 연합체로 바라보는 안목은 필수 항목 2: #define을 쓰려거든 const, enum, inline을 떠올리자 항목 3: 낌새만 보이면 const를 들이대 보자! 항목 4: 객체를 사용하기 전에 반드시 그 객체를 초기화하자 Chapter 2 생성자, 소멸자 및 대입 연산자 항목 5: C++가 은근슬쩍 만들어 호출해 버리는 함수들에 촉각을 세우자 항목 6: 컴파일러가 만들어낸 함수가 필요 없으면 확실히 이들의 사용을 ..
C++ 프로그래머의 필독서이자 바이블인, 스콧 마이어스의 Modern Effective C++ 를 읽고 기억할 내용을 요약하고 있습니다. 꼭 읽어보시길 추천드립니다! 항목 42 : 삽입 대신 생성 삽입을 고려하라 핵심 : 1. 이론적으로, 생성 삽입 함수들은 종종 해당 삽입 버전보다 더 효율적이어야 하며, 덜 효율적인 경우는 절대로 없어야 한다. 2. 실질적으로, (1) 추가할 값이 컨테이너에 배정되는 것이 컨테이너에 배정되는 것이 아니라 컨테이너 안에서 생성되고, (2) 인수 형식(들)이 컨테이너가 담는 형식과 다르고, (3) 그 값이 중복된 값이어도 컨테이너가 거부하지 않는다면, 생성 삽입 함수가 삽입 함수보다 빠를 가능성이 아주 크다. 3. 생성 삽입 함수는 삽입 함수라면 거부당했을 형식 변환들을 ..
C++ 프로그래머의 필독서이자 바이블인, 스콧 마이어스의 Modern Effective C++ 를 읽고 기억할 내용을 요약하고 있습니다. 꼭 읽어보시길 추천드립니다! 항목 41 : 이동이 저렴하고 항상 복사되는 복사 가능 매개변수에 대해서는 값 전달을 고려하라 핵심 : 1. 이동이 저렴하고 항상 복사되는 복사 가능 매개변수에 대해서는 값 전달이 참조 전달만큼이나 효율적이고, 구현하기가 더 쉽고, 산출되는 목적 코드의 크기도 더 작다. 2. 왼값 인수의 경우 값 전달(즉, 복사 생성) 다음의 이동 배정은 참조 전달 다음의 복사 배정보다 훨씬 비쌀 가능성이 있다. 3. 값 전달에서는 잘림 문제가 발생할 수 있으므로, 일반적으로 기반 클래스 매개변수 형식에 대해서는 값 전달이 적합하지 않다. Widget 클래..
C++ 프로그래머의 필독서이자 바이블인, 스콧 마이어스의 Modern Effective C++ 를 읽고 기억할 내용을 요약하고 있습니다. 꼭 읽어보시길 추천드립니다! 항목 40 : 동시성에는 std::atomic 을 사용하고, volatile 은 특별한 메모리에 사용하라. 핵심 : 1. std::atomic 은 뮤텍스 보호 없이 여러 스레드가 접근하는 자료를 위한 것으로, 동시적 소프트웨어의 작성을 위한 도구이다. 2. volatile 은 읽기와 기록을 최적화로 제거하지 말아야 하는 메모리를 위한 것으로, 특별한 메모리를 다룰 때 필요한 도구이다. std::atomic 은 보통 뮤텍스보다 더 효율적인 기계어 명령들로 구현된다. std::atomic 을 사용하는 다음 예제 코드를 보자. std::atomi..
C++ 프로그래머의 필독서이자 바이블인, 스콧 마이어스의 Modern Effective C++ 를 읽고 기억할 내용을 요약하고 있습니다. 꼭 읽어보시길 추천드립니다! 항목 39 : 단발성 사건 통신에는 void 미래 객체를 고려하라 핵심 : 1. 간단한 사건 통신을 수행할 때, 조건 변수 기반 설계에는 여분의 뮤텍스가 필요하고, 검출 과제와 반응 과제의 진행 순서에 제약이 있으며, 사건이 실제로 발생했는지를 반응 과제가 다시 확인해야 한다. 2. 플래그 기반 설계를 사용하면 그런 단점들이 없지만, 대신 차단이 아니라 폴링이 일어난다는 단점이 있다. 3. 조건 변수와 플래그를 조합할 수도 있으나, 그런 조합을 이용한 통신 메커니즘은 필요 이상으로 복잡하다. 4. std::promise 와 미래 객체를 사용..
C++ 프로그래머의 필독서이자 바이블인, 스콧 마이어스의 Modern Effective C++ 를 읽고 기억할 내용을 요약하고 있습니다. 꼭 읽어보시길 추천드립니다! 항목 38 : 스레드 핸들 소멸자들의 다양한 행동 방식을 주의하라 핵심 : 1. 미래 객체의 소멸자는 그냥 미래 객체의 자료 멤버들을 파괴할 뿐이다. 2. std::async 를 통해 시동된 비지연 과제에 대한 공유 상태를 참조하는 마지막 미래 객체의 소멸자는 그 과제가 완료될 때까지 차단된다(기다린다). 합류 가능 std::thread 는 바탕 시스템의 실행 스레드에 대응된다. 그와 비슷하게 지연되지 않은 과제에 대한 미래 객체도 시스템 스레드에 대응된다. 따라서 std::thread 객체와 미래 객체 모두 시스템 스레드에 대한 핸들(ha..