티스토리 뷰

LB/개발

event manager 에 대해

bramach 2018. 6. 22. 16:43

교수님이 꽂혀있는 구조는 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
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함