IOLoop
libtnet采用的是prefork + event loop的架构方式,prefork就是server在启动的时候预先fork多个子进程同时工作,而event loop则是基于epoll的事件处理机制。
在最新的linux系统中,提供了timerfd,eventfd,signalfd,加上原先的socket,大部分功能都可以抽象成io事件来处理了。而在libtnet中,这一切的基础就是IOLoop。
类似于tornado,libtnet的IOLoop也提供了相似的接口。其中最核心的就是以下三个:
typedef std::function<void (IOLoop*, int)> IOHandler_t;
int addHandler(int fd, int events, const IOHandler_t& handler);
int updateHandler(int fd, int events);
int removeHandler(int fd);
对于任意的IO,我们可以注册感兴趣