原创 無鎖隊列、自旋鎖隊列、互斥鎖隊列性能對比測試

介紹 無鎖隊列 先大致介紹一下無鎖隊列。無鎖隊列的根本是CAS函數——CompareAndSwap,即比較並交換,函數功能可以用C++函數來說明: int compare_and_swap (int* reg, int oldva

原创 一個完全解耦的對象池模型

先說想法 我想嘗試寫一種對象池模型,使得所有經有new得到的對象實際上都會從一個鏈表中取,並在delete的時候把資源返回給鏈表。 完整源碼 我寫了一個demo來實現我的思路,思路不復雜,但想盡量寫的精緻。也希望有想法的看官能提點

原创 Boost.ASIO源碼:從async_write看ASIO的異步IO邏輯

async_write有兩個對外接口: template <typename AsyncWriteStream, typename Allocator, typename WriteHandler> inline BOOST_ASIO

原创 模板偏特化和默認模板參數的匹配順序

在閱讀Boost.ASIO的時候看到了下面這種寫法: template <typename CompletionToken, typename Signature = void> class async_result { public

原创 一個用於控制對象個數的基類

讀到《More Effective C++》中的“計算對象個數的Base Class”一節時,感覺書中講的例子很有特點,故在此記錄下來,順便按照個人的一點想法稍微改善一下。 先講需求,這裏要設計一個可以控制某個類型所存在對象個數的基類

原创 Boost.ASIO源碼:deadline_timer源碼級解析(三)—— 從源碼解釋io_service::run()到底發生了什麼

前前後後run這個函數來來往往反反覆覆看了不知道多少遍,對它的邏輯始終沒弄明白,直到最近研究deadline_timer才恍然大悟理清了前面的一些邏輯,在此順便總結一下,也算是填了前面幾個博客一直沒講明白的一些點。(因爲那時我還沒完全

原创 Boost.ASIO源碼:deadline_timer源碼級解析(二)——epoll_reactor定時器邏輯

前文回顧 前面講deadline_timer::async_wait()講到了epoll_reactor::scheduler_timer(),那時候講得很模糊,這裏稍微展開再講解一下。首先先回顧下scheduler_timer的源碼

原创 Boost.ASIO源碼:deadline_timer源碼級解析(一)

deadline_timer相關類介紹 deadline_timer衆所周知,是asio的一個核心定時器,支持同步定時觸發和異步定時觸發。具體有什麼功能如何使用這裏不作介紹,本文主要從deadline_timer的wait和async

原创 Boost.ASIO源碼:pthread包裝類——posix_event小結

posix_event介紹 該類用在scheduler中,用於喚醒阻塞的線程,下面代碼中的conditionally_enabled_event實際上就是posix_event的包裝類: class scheduler : pub

原创 Boost.ASIO源碼:service_registry::use_service()詳解以及相關type_traits解析

這都是神仙寫的代碼吧 沒什麼,這個標題只是忍不住表達一下對ASIO的驚歎。 曾經看《STL源碼剖析》對裏面的type_traits的設計驚爲天人,沒想到看ASIO庫的時候又看到了同樣的設計模式,雖然對於C++功底還不深的我來說看起來十

原创 Boost.ASIO源碼:thread_info_base::allocate古怪的內存分配邏輯解析與猜想

自我感覺這個內存組織思路很有參考學習價值,故在此總結一下。 thread_info_base介紹 啥是thread_info 要引出thread_info_base就得從scheduler說起,scheduler實際上就是io_ser