先看下工作模型
这个模型很多库也是类似做法,比如muduo.
概述:主线程 + iothread + work池模式
简单分析下主要类的功能和流程:
TNonblockingIOThread:
IO线程(主线程),运行着libevent的主循环
主要成员包括 主线程指针,listensocket,pipefd等
入口: serve()
创建监听套接字,启动iothread(1-n),主线程直接调iothread[0]的run
启动:run()
初始化libevent的东西,registerEvents()
关注listensocket的read事件(id=0时,即为主线程),创建pipefd,关注pipefd的read事件
运行libevent的主循环
主线程accept, handleEvent:
accept客户端连接,如果有过载保护,且过载了则可能踢掉这个链接,如果过载策略是清理队列,则执行drainPendingTask(清理并关闭连接)
设置非阻塞,创建一个connection,这个conn归属到那个iothread是round-robin方式,即自增%size形式,加入后并不关注read/write事件
如果是单线程就