본문 바로가기

컴퓨터61

GPG Study 1.2 TMP를 이용한 수학연산 GPG Study 1.2TMP를 이용한 빠른 수학연산템플릿 메타 프로그래밍 (TMP)템플릿 : Generic한 프로그래밍을 목표로 만들어진 C++ 문법template //For Ani Type T void GenericFinc(T param) //About T Type Param { param.DoSomething(); } //Call DoSomething()템플릿 메타 프로그래밍템플릿의 타입추론이 컴파일 시간에 이루어진다는 것을 응용하여 컴파일 시간에 가능한 중간작업들을 미리 처리하는 프로그래밍 방법론. 템플릿을 일종의 Pre-Compiler로 사용하여 최적화한다. 컴파일 시간은 보다 길어지지만, 런타임의 수행시간이 짧아지게 프로그래밍 할 수 있다. 여기에 템플릿 특유의 Generic한 파워가 합쳐지면.. 2015. 6. 22.
멀티 쓰레드 서버 버그잡기 2 멀티 쓰레드 서버 버그잡기 2전체 쓰레드 상황 빠른 스캔DB 쓰레드들은 GQCS에서 건전하게 대기 중IO 쓰레드들은 FlushSend에서 방황 중FlushSend 빠른 스캔I/O 쓰레드 대부분이 FastSpinlock에 걸려있다. 데...데드락?하지만 해당 임계영역에 블로킹 걸릴 소지가 없다. 단일 Lock만 사용하기에 Lock자원의 교착상태가 발생할 여지가 없다.실제로 덤프 시점에 하나의 쓰레드가 락을 빠져나가는 것이 포착되었다. Lock은 문제가 아니야. FlushSend를 호출하는 DoSendJob으로 화살을 돌려본다.DoSendJob 빠른 스캔DoSendJob은 Blocking이 걸리기 쉬운 구조로 생겼다. 의심이 증폭된다.세션의 FlushSend가 실패하게되면 LSendRequestSession.. 2015. 5. 27.
Modern Effective C++ Item 34 : std::bind 보다 람다를 쓰자 std::bind보단 람다를 쓰자.std::bind는 C++98에서 std::bind1st와 std::bind2nd 그리고 stl에서 2005년부터, 그 이전에는 TR1에서부터 쭉 많은 사람들에게 사용되었다. 그래서 누군가는 std::bind를 버리라는 말이 띠껍게 들릴지도 모른다. 하지만 C++11에서 채용된 람다는 강력한 기능들과 이해하기 쉬운 문법으로 무장하여 std::bind보다 더 좋은 선택이 되었다. 그리고 C++14에 와서는 람다는 std::bind의 완벽한 상위호환이 되었다.std::bind는 가독성이 떨어진다.std::bind보다 람다를 선호하는 가장 큰 이유중 하나는 바로 가독성이다. 시간에 맞춰 알람을 주는 함수를 만드는 예를 살펴보자.using Time = std::chrono::s.. 2015. 5. 19.
Modern Effective C++ Item 33 : 람다 forwarding엔 decltype 람다에서 std::forward 인자는 decltypec++14람다에서 가장 신통한 것은 바로 인자로 auto를 받는 generic lamdas이다. 람다에서 인자를 auto로 받는다는 것은 람다로 부터 나온 closure 클래스의 opearator( )가 템플릿이 된다고 볼 수 있다. 예를 들어 이런 auto를 인자로 받는 람다를 보자.auto f = [](auto x){ return func(normalize(x));};이 람다로 부터 나온 클로저 클래스는 다음과 같이 생겼다.class SomeCompilerGeneratedClassName{ public: template auto operator( )(T x) const { return func(normalize(x)); } ... }위 예제에서 람.. 2015. 5. 19.