muduo原始碼分析--EventLoopThreadPool類
阿新 • • 發佈:2019-01-05
這個貌似是個池,池裡全是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