muodu 開源閱讀(一)

2021-06-27 09:51:14 字數 2035 閱讀 9815

建立乙個tcpserver(包含eevntloop,acceptor,eventthreadpool),呼叫setthreadnum設立執行緒的數目,然後呼叫start()啟動server。在start()中,執行緒池的建立由函式threadpool_->start(threadinitcallback_)完成;啟動監聽由loop_->runinloop(boost::bind(&acceptor::listen, get_pointer(acceptor_)))完成

threadpool_->start(threadinitcallback_)的實現如下:

void eventloopthreadpool::start(const threadinitcallback& cb)

if (numthreads_ == 0 && cb)

}

eventloopthread中包含乙個thread變數,其建構函式如下:

eventloopthread::eventloopthread(const threadinitcallback& cb)

: loop_(null),

exiting_(false),

thread_(boost::bind(&eventloopthread::threadfunc, this), "eventloopthread"), // fixme: number it

mutex_(),

cond_(mutex_),

callback_(cb)

}

}

void eventloopthread::threadfunc()

loop.loop();

//assert(exiting_);

loop_ = null;

}

可見loop只是乙個棧變數。

loop_->runinloop()主要啟動監聽,這時需要類acceptor型的變數:

void acceptor::listen()

因為acceptor完成的是監控連線的功能,其必然包含兩個變數channel和socket.

acceptchannel主要是用來監聽的channel,其handevent()最終會執行 acceptchannel_.setreadcallback(boost::bind(&acceptor::handleread, this));

acceptor::handleread的實現如下:

void acceptor::handleread()

else

} else

}}

解釋:每當收到乙個連線,就執行一遍handleread(),注意此時仍然在主線程中。接著通過newconnectioncallback_()執行tcpconnection::newconnection(),建立乙個新的連線:

void tcpserver::newconnection(int sockfd, const inetaddress& peeraddr)

此函式,個人認為是整個muduo的精華的所在,即one loop per thread。注意兩句**:

eventloop* ioloop = threadpool_->getnextloop();和

conn->setclosecallback(

boost::bind(&tcpserver::removeconnection, this, _1)); // fixme: unsafe

ioloop->runinloop(boost::bind(&tcpconnection::connectestablished, conn));

這兩句完成了round-robin演算法分發連線,以及對該連線在分發到的執行緒進行收發資料。

開源閱讀 開源如何維持您的閱讀習慣

開源閱讀 經常閱讀有關技術的資訊可以幫助您建立事業。我最近分享,在情人 節 我該怎麼讀 什麼有些人會說是 的書太多了。我曾經有乙個硬拷貝圖書館,實際上在我丈夫搬進來之前我的房子已經占用了我的兩個房間。他尊重地要求為人們提供空間,並且我考慮了向數位化的轉變。我仍然需要占用大量空間,但是現在僅限於電子閱...

開源軟體閱讀技巧心得

知其然,更要知其所以然 開源軟體 所以然 風格 每一種語言 每乙個社群 每乙個開發者群體,甚至每乙個開源專案,都有其獨特的 風格,這種風格,有其背後的合理性,也有很多是 於某種開發哲學的思考。理解一種 風格,就是理解一種思考的模式,一種思想的體系。能夠多了解一些不同種類的 風格,對於提高軟體開發能力...

如何閱讀linux c開源專案呢?

如何閱讀linux c開源專案呢?1.先baidu知道這個玩意是做什麼用的 對這個軟體產品的功能有了解 2.看官方文件關於架構設計的思考,或者總結的架構框架 對 的框架有了解 3.看這個軟體的一些設計細節,比如怎麼模組化劃分,主要用到什麼資料結構和演算法,這時候可以試著編譯執行 看configure...