多线程TcpServer
2024-08-30 21:59:47
多线程TcpServer自己的EventLoop只用来接收新连接(即TcpServer所属线程的EventLoop只监听listen fd),而新连接会用其他EventLoop来执行IO(即每个新TcpConnection对象都会在线程池中分配一个线程来处理该连接上的IO事件).
单线程TcpServer的EventLoop是与TcpConnection共享的,listen fd和accept返回的客户连接fd都是在一个EventLoop中处理的.
TcpServer每次新建一个TcpConnection就会调用getNextLoop()来取得EventLoop,如果是单线程服务,每次返回的都是baseLoop_,即TcpServer自己用的那个loop
EventLoop* EventLoopThreadPool::getNextLoop()
{
baseLoop_->assertInLoopThread();
assert(started_);
EventLoop* loop = baseLoop_; if (!loops_.empty())
{
// round-robin
loop = loops_[next_];
++next_;
if (implicit_cast<size_t>(next_) >= loops_.size())
{
next_ = ;
}
}
return loop;
}
muduo目前的设计是每个TcpServer有自己的EventLoopThreadPool,多个TcpServer之间不共享EventLoopThreadPool.
最新文章
- 贪吃蛇的java代码分析(二)
- 新接触PHP课程,给自己定制的目标
- (转)Android 系统属性SystemProperty分析
- Hong Kong Regional Online Preliminary 2016 C. Classrooms
- Java数据库——PreparedStatement接口
- boxes
- 【解决】 新浪sae固定链接404 问题
- makefile中的shell语法
- lamada 表达式之神奇的groupby
- class ha_innobase: public handler
- 14.3 InnoDB Multi-Versioning InnoDB 多版本
- 【操作系统】linux创建子进程--fork()方法
- 【转】stdin, stdout, stderr 以及重定向
- Java图形化界面设计——中间容器(Jpanel)
- linux下一个Oracle11g RAC建立(五岁以下儿童)
- jenkins IOS- ad-hoc 打包
- Linux挂载
- Nginx ServerName指令
- 牛客网数据库SQL实战(此处只有答案,没有表内容)
- ODPS SQL <;for 数据操作语言DML>;