主页 > 手机  > 

1.12.C++项目:仿muduo库实现并发服务器之LoopThreadPool模块的设计

1.12.C++项目:仿muduo库实现并发服务器之LoopThreadPool模块的设计

文章目录 一、LoopThreadPool模块二、实现思想(一)功能(二)意义(三)功能设计 三、代码

一、LoopThreadPool模块

1.线程数量可配置(0或多个) 2. 对所有的线程进行管理,其实也就是管理0个或多个LoopThread对象! 3. 提供线程分配的功能!

二、实现思想 (一)功能

针对LoopThread设计一个线程池,便于管理。

(二)意义

对所有的LoopThread进行分配和管理!

(三)功能设计

1.线程数量可配置(0或多个) 注意事项:在服务器中,主从Reactor模型是 主线程只负责新连接获取,丛书线程负责新连接的事件监控以及处理!因此当前的线程池,有可能从属线程会数量为0,也就是实现单 Reactor服务器,一个线程及负责获取连接以及连接的处理! 2. 对所有的线程进行管理,其实也就是管理0个或多个LoopThread对象! 3. 提供线程分配的功能! 当主线程获取了一个链接,需要将新的线程挂到从属线程上进行事件监控以及管理! 假设0个从属线程,则直接分配给主线程的EventLoop,进行处理! 假设有多个丛书线程,则采用RR轮转!(将对应线程的EventLoop获取到,设置给对应的Connection)

三、代码 class LoopThreadPool { private: int _thread_count; int _next_idx; EventLoop *_baseloop; std::vector<LoopThread*> _threads; std::vector<EventLoop *> _loops; public: LoopThreadPool(EventLoop *baseloop):_thread_count(0), _next_idx(0), _baseloop(baseloop) {} void SetThreadCount(int count) { _thread_count = count; } void Create() { if (_thread_count > 0) { _threads.resize(_thread_count); _loops.resize(_thread_count); for (int i = 0; i < _thread_count; i++) { _threads[i] = new LoopThread(); _loops[i] = _threads[i]->GetLoop(); } } return ; } EventLoop *NextLoop() { if (_thread_count == 0) { return _baseloop; } _next_idx = (_next_idx + 1) % _thread_count; return _loops[_next_idx]; } };
标签:

1.12.C++项目:仿muduo库实现并发服务器之LoopThreadPool模块的设计由讯客互联手机栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“1.12.C++项目:仿muduo库实现并发服务器之LoopThreadPool模块的设计