30dayMakeCppServer icon indicating copy to clipboard operation
30dayMakeCppServer copied to clipboard

关于day12中的Server类的构造函数

Open ganyibo opened this issue 2 years ago • 3 comments

Server::Server(EventLoop _loop) : mainReactor(_loop), acceptor(nullptr){ acceptor = new Acceptor(mainReactor); std::function<void(Socket)> cb = std::bind(&Server::newConnection, this, std::placeholders::_1); acceptor->setNewConnectionCallback(cb);

int size = std::thread::hardware_concurrency();
thpool = new ThreadPool(size);
for(int i = 0; i < size; ++i){
    subReactors.push_back(new EventLoop());//这里不明白,每次new EventLoop对象都会构建一个新的红黑树,
}

for(int i = 0; i < size; ++i){
    std::function<void()> sub_loop = std::bind(&EventLoop::loop, subReactors[i]);//每个subReactors都需要执行loop函数,即真正的业务逻辑
    thpool->add(sub_loop);
}

}

for(int i = 0; i < size; ++i){ subReactors.push_back(new EventLoop());//这里不明白,每次new EventLoop对象都会构建一个新的红黑树, } 请问这个部分每次创建新的EventLoop都会创建新的epoll红黑树,请问为什么需要创建多个红黑树,多线程多Reactor模型中sub-Reactor也需要自己的epoll红黑树吗?

ganyibo avatar Apr 14 '22 13:04 ganyibo

我悟了

ganyibo avatar Apr 14 '22 13:04 ganyibo

同问为什么 为什么不用一个epoll 根据IO事件 来分给主从 处理?

guanweile avatar Aug 26 '22 08:08 guanweile

我悟了 咋悟的啊,我现在对这个问题有点懵,可以指导一下吗

UserSck avatar May 11 '23 14:05 UserSck