티스토리 뷰
교수님이 꽂혀있는 구조는 event manager.
오래걸리는 작업은 큐에 넣어놓고 나중에 처리 가능할 때 작업하자 임.
구글 serving 코드에 util/http_net 폴더를 보시면 http 서버가 있음
얘는 libevent 를 사용함.
한 스레드에서 루프 돌면서 걸려있는 이벤트들이 발생하면 콜백을 불러줌.
ev_dipatch를 하면 모든 이벤트 다 처리 할 때까지 돈다.
thread_pool 하나를 두고 여기다가 ev_dipatch를 schedule 하며 cb 함수 안에서 로직은 이 thread_pool에 cb함수를 등록하게 되어 있다.
사실 libevent 에서 io, condition variable 에 대해서 이벤트를 만들 수 있으니 이 구조면 거의 event manager 와 같은 효과를 얻을 수 있다.
thread_pool은 boost 에(도) 있는데, 부스트나 버전에 따라 바뀌는 함수들은 abseil 이라는 라이브러리로 또 추상화 되어있어 (?) absl::thread_pool 사용함.
*
참고로 dpdk 스레드 관리 코드도 볼만 한데, 여기선 모두 같은 job을 하게 되어있음. (master - 동일 slaves)
'LB > 개발' 카테고리의 다른 글
dpdk 메모리 디버깅은 전용 dpdk-valgrind로 (0) | 2018.03.31 |
---|---|
attribute packed 관련 버그픽스 (0) | 2018.03.31 |