1. 程式人生 > >muduo原始碼分析--EventLoopThreadPool類

muduo原始碼分析--EventLoopThreadPool類

這個貌似是個池,池裡全是EventLoopThread。貌似很強大         這個類對外的介面也很簡單         一個建構函式,需要傳遞的是EventLoop           一個設定個數的函式 setThreadNum,這個函式好像決定了開啟幾個EventLoopThread         一個start  從感覺上來看這個函式是按照numThreads_的數目來開啟執行緒的,EventLoopThreadPool中有一個向量存放著E3ventLoopThread             還有一個getNextLoop函式             這個函式貌似是從EventLoopThread向量中獲取合適的EventLoopThread的 。             但是可怕的是,建構函式需要傳遞給她的baseLoop_,誰會傳遞給它呢?還是來規矩,可能EventLoopThreadPool的擁有者傳遞給它!         它既然擁有了EventLoopThread,那麼EventLoopThread中缺少的回撥是夠會是它傳遞呢?         這裡的start函式就是按照numThreads_的數目逐個初始化EventLoopThread(記住每一個EventLoopThread內部都有一個EventLoop處於loop()狀態)         原來將start函式的引數傳遞給了EventLoopThread作為其內部成員callback_,現在就是EventLoopThreadPool的擁有者給其傳遞的回撥,然後這個回撥在傳遞個EventLoopThread中,同時需要它的擁有者傳遞baseLoop。         如果neumThreads_為0,那麼不進行執行緒的初始化,直接將baseloop傳遞給回撥。         getNextLoop函式從池子中輪詢的方式查詢從loops_中找到合適的EventLoop.         簡而言之:         這個類需要三個引數,一個baseloop(它的作用是什麼呢,萬一使用者不準備開啟EventLoopThreadPool,如果設定的setNumthread為0,那麼傳遞給的這個eventloop就需要用,那麼這個baseloop可以作為一個返回值)         一個是準備開啟EventLoopThread的數目,就是setNumThread函式需要的引數     ·    另一個就是開啟EventLoopThreadPool的回撥,就是start需要的回撥,這個回撥同樣也賦值給EventLoopThread         那麼是誰擁有EventLoopThreadPool呢? T   cpServer