11 posts tagged with study
c++ message dispatcher
간단한 message dispatch 코드를 c++로 구현해보자. 일단 std::function을 안 쓰고 구현해보고, 그 다음에 std::function을 써서 구현해보자. 지난 번 글에서 functor_ii로 handler_t의 근간을 이미 설명했다. interface인 wrapper_t, 실 구현체인 impl_t, 그리고 그것을 멤버로 갖는 type erasure가 적용된 대표 type인 handler_t이다.…
function adapter와 type inference
과제는 다음의 Adapter를 만들어보자는 것이다. 많은 친구들이 이미 문제를 잘 풀었기 때문에 자세한 설명은 생략한다. 이름 잘 지어주는 것도 물론 중요하지만 이정도 코드에서는 저정도 글자만 써줘도 이해할 것 같으니 과감히 생략. 개인적으로 풀이 중 가장 마음에 드는 것은 Omniavinco가 if1live 글에 댓글로 단 binder1st 상속을 통한 구현. (있는 것 가져다가 쓰는게 제일) type infererence…
template 프로그래밍과 type erasure
첫 번째 코드(for_each)는 _Iter, _FuncTy에 들어가는 각 type에 맞게 compile time에 모든 code가 생성(template instantiation)되어 어떤 함수가 호출될지 compile time에 결정되는 구조이고, 두 번째 코드(ForEach)는 Iterator와 Functor interface를 구현한 객체가 runtime에 ForEach() 함수로 넘어간 다음 virtual…
template을 사용한 generic 프로그래밍
(한 번에 1~2시간 정도로 짧게(?) 하고 있다. 대충 accelerated c++ 책이랑 EC++ 책을 보고 있다.) C++ 언어를 가지고 C++스럽게 프로그래밍을 해보자! 는 어떤 의미일까? 다양한 의견이 있겠지만, 프로그래밍 언어는 표현력이 증가하는 쪽으로 발전한다는 관점에서 프로그래머가 C에 비해서 보다 자신의 의도를 C…
분산 시스템 구현 과제 정리
뭐라도 좋으니 간단한 분산 시스템을 구현해보자! 단일 시스템과 비교하여 성능 혹은 가용성을 높이기 위해 분산 시스템을 설계해야 하는 것이니 일단 네트워크 프로그래밍은 필수이다. 효율을 높이기 위해 얼마나 작업을 잘 쪼개고 합치는가도 고민해야 하고, 장애가 발생했을 때 얼마나 복구될 수 있는지도 고민해야 한다. angdev님의 시스템 풀씨 프로그래밍 대회 채점 서버를 nodejs/c++로 구현했다. aws…
concurrency pattern과 분산 시스템 스터디
Concurrency Pattern부터 Distributed System까지! 근데 대충함 … Concurrency pattern 대충 정리해보자. Wiki: Active Object Active Object는 Actor Model 구현하면서 써봤다. asynchronous method invocation과 request scheduling이 관건이다. 지난 글에서는 함수 요청을 functor로 만들어서 요청을 queueing…
c++11 async, corotuine, io 스터디
오늘 스터디에서 공부한 내용을 간단히 정리해보자. async, future future, promise는 비동기로 실행되는 수행 결과를 받아오기 위한 개념이다. async는 내부적으로 promise를 사용하여 결과를 set()할 비동기 작업을 수행시키고, future를 반환한다. packaged_task는 비동기 작업을 수행할 수 있는 task 객체를 만들어준다. task 객체로부터 future를 가져올 수 있다. vs201…
producer/consumer model 구현
먹깨비 과제를 풀어보자. 여러 가지 구현법이 있을 것인데, 나는 간단하게 바구니는 공유 자원이니 lock으로 보호하고, 제빵사와 먹깨비는 actor로 만들어서 매 tick마다 상황 판단 후 작업을 처리하도록 했다. 따라서 공유 자원을 보호하기 위한 spin_lock과 actor 기반 코드를 만들었고 그 기반으로 바구니, 제빵사, 먹깨비를 만들었다. 먼저 spin_lock…
concurrency 알고리즘과 memory model
오늘 스터디에서 공부한 내용을 간략히 정리해보자. 원래 의도는, peterson’s algorithm을 보고 여기서 비순차 실행이 일어날 때 발생하는 문제를 보고, memory consistency model의 memory order를 통해 문제를 어떻게 해결할 수 있는지 본 후에, lock free stack, lock free queue algorithm을 보고 문제를 파악한 후에 이를 해결하기 위해 hazard…
thread-safe한 counter 구현
먼저 간단한 counter example을 만들어보자. 문제를 확인하기 위해서 다음과 같은 코드를 작성해본다. c++ code 한 줄이 원자적(atomic)으로 실행된다는 보장은 없다. assembly의 한 줄도 원자적으로 실행된다는 보장은 없다(smp, micro-operation) 위 코드를 release로 빌드해보면 ++counter 부분에 대한 코드가 assembly로 한 줄이 나오는데, 어쨌든 expect…
concurrency 스터디
오늘 스터디에서 공부한 내용을 간략히 정리해보자. Wiki: ABA problem Simple, Fast, and Practical Non-Blocking and Blocking Concurrent Queue Algorithms context switching과 simultaneously 실행 환형큐의 thread unsafety 문제 volatile/interlocked operation/memory barrier…