一、LoopThreadPool模塊
1.線程數(shù)量可配置(0或多個)
2. 對所有的線程進(jìn)行管理,其實(shí)也就是管理0個或多個LoopThread對象!
3. 提供線程分配的功能!
二、實(shí)現(xiàn)思想
(一)功能
針對LoopThread設(shè)計(jì)一個線程池,便于管理。
(二)意義
對所有的LoopThread進(jìn)行分配和管理!文章來源:http://www.zghlxwxcb.cn/news/detail-723802.html
(三)功能設(shè)計(jì)
1.線程數(shù)量可配置(0或多個)
注意事項(xiàng):在服務(wù)器中,主從Reactor模型是 主線程只負(fù)責(zé)新連接獲取,叢書線程負(fù)責(zé)新連接的事件監(jiān)控以及處理!因此當(dāng)前的線程池,有可能從屬線程會數(shù)量為0,也就是實(shí)現(xiàn)單 Reactor服務(wù)器,一個線程及負(fù)責(zé)獲取連接以及連接的處理!
2. 對所有的線程進(jìn)行管理,其實(shí)也就是管理0個或多個LoopThread對象!
3. 提供線程分配的功能!
當(dāng)主線程獲取了一個鏈接,需要將新的線程掛到從屬線程上進(jìn)行事件監(jiān)控以及管理!
假設(shè)0個從屬線程,則直接分配給主線程的EventLoop,進(jìn)行處理!
假設(shè)有多個叢書線程,則采用RR輪轉(zhuǎn)?。▽?yīng)線程的EventLoop獲取到,設(shè)置給對應(yīng)的Connection)文章來源地址http://www.zghlxwxcb.cn/news/detail-723802.html
三、代碼
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];
}
};
到了這里,關(guān)于1.12.C++項(xiàng)目:仿muduo庫實(shí)現(xiàn)并發(fā)服務(wù)器之LoopThreadPool模塊的設(shè)計(jì)的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!