讀者來信與解答 1

2021-06-18 16:32:41 字數 2000 閱讀 7645

讀者來信用黑色,我的回答用藍色。經過整理,接近對話體。

> 陳碩,你好,

>

> 閱讀了你的書,很有收穫。

> 但是沒有在moduo的源**裡面找到實現執行緒模型11的例子。即one thread per loop + thread pool。

> 謝謝。

書第 173 頁圖 6-14 下面的第一段話,具體改動方法參考前一頁的 diff。

> 謝謝。

>

> 另外tcpconnection和channel的生命週期管理有點問題。

> tcpconnection如果已經被**了,其包含的channel也已經被**了。而這個時候在channel::handleevent()裡面檢查tied_和tie_是危險的。因為其記憶體已經被**了。

>

> 如果使用者保證tcpconnection被**之後,不會再用channel的裸指標,則沒有必要在tcpconnection::connectestablished()中call tie().

tcpconnection **之前,會呼叫 connectdestroyed,其中呼叫 channel_->remove();,這樣就不可能再會有 channel::handleevent() 被呼叫了。

tie() 的作用是防止 channel::handleevent() 執行期間其 owner 物件析構,導致 channel 本身被銷毀。

> > tcpconnection **之前,會呼叫 connectdestroyed,其中呼叫 channel_->remove();,這樣就不可能再會有 channel::handleevent() 被呼叫了。

> 這個時候會不會有race condition?假設現在有兩個active channels,處理頭乙個的時候**tcpconnection,而第二個channel剛好對應這個connection。

這時你沒有辦法強制銷毀 tcpconnection,只能降低其引用計數,所以不會有問題。你可以寫段**試試。

> 另外底層的poller os api是否保證unregister channel之後一定不會再有這個channel的事件,會清空核心的已經就緒的事件佇列?

跟核心沒關係,poller class 在 unregister channel 之後就不可能呼叫其 handleevent() 成員函式。

> 那epollpoller::fillactivechannels()的改一改,「assert(it != channels_.end());」不再適用了,而且每次都個event都要查一次map。效率會有問題。

assert() 只有在 debug build 才執行,不會影響效率。

再說每個 event 都要涉及 read/write 等系統呼叫,開銷比「查一次 map」大得多,優化這裡是無用功。

> 但這個assert()不是invalid了嗎?你可能之前在unregister channel的時候已經從map裡面remove掉了它。

這個 assert 是有效的,你再想想。

> > tie() 的作用是防止 channel::handleevent() 執行期間其 owner 物件析構,導致 channel 本身被銷毀。

> 這個也不太make sense。仍然有race conditon。在channel::handleevent()擁有guard鎖定ownner之前,channel::handleevent()需要檢查其tied_。

你再想想,tie 的作用是防止呼叫 handleevent() 期間物件銷毀(比如呼叫 closecallback 期間),不是也不可能防止呼叫 handleevent() 之前物件銷毀。

> 恩,是的。整個tcpconnection, channel, eventloop都是乙個thread裡面run的。

讀者來信與解答 1

讀者來信用黑色,我的回答用藍色。經過整理,接近對話體。陳碩,你好,閱讀了你的書,很有收穫。但是沒有在moduo的源 裡面找到實現執行緒模型11的例子。即one thread per loop thread pool。謝謝。書第 173 頁圖 6 14 下面的第一段話,具體改動方法參考前一頁的 dif...

讀者來信 這是乙個由可能構成的世界

最近陸續收到了一些讀者來信,以後會陸續選登以饗更多的讀者,共同努力,共同進步!沒有稿費,只有謝謝!這是乙個由可能構成的世界 一直認為,智慧型的核心和本質比智慧型的計算和模型重要的多。西方人之所以在科學技術上不斷突破和領先,主要是有著深厚的積累,這種積累不但包括物理 化學 生物等具體學科的,更包括哲學...

物理學與PDEs 第1章習題參考解答

物理學與pdes 第1章習題1 無限長直線的電場強度與電勢 物理學與pdes 第1章習題2 均勻帶電球面的電場強度與電勢 物理學與pdes 第1章習題3 常場強下電勢的定解問題 物理學與pdes 第1章習題4 偶極子的極限電勢 物理學與pdes 第1章習題5 偶極子的電場強度 物理學與pdes 第1...