MonaTiny之分析開篇Memory

2021-08-11 16:52:54 字數 1327 閱讀 2012

一直打算分析monatiny流**伺服器,只能看一部分記錄一部分。monaserver是乙個類似fms,srs,live555一樣的流**伺服器,支援rtmp,rtmpe,http,websocket,rtsp等協議。monatiny為monaserver的簡化版本,大體上重構了一遍**,去掉了lua部分,功能也沒有monaserver豐富,但是一些核心的功能具備。

monatiny**從專案上分為monabase, monacore,monatiny。我將從分析流的發布及訂閱開始閱讀,主線之外會涉及到一些輔助**,這些**是搭建整個體系的核心,這些核心就在monabase和monacore中。monabase主要提供net,memory,log,time,disk等基礎伺服器類的實現;monacore主要實現容器及協議的操作。

下面從monabase的memory部分開始,memory主要是一些記憶體分配及二進位制操作的類,主要有:

allocator 負責分配和釋放記憶體及乙個預設的分配器,派生自object,object是乙個不能拷貝構造及右值構造的類。

binary 二進位制操作基類,其中過載方法get7bitvaluesize用途暫時不明,以後補充。從函式看是統計有多少個非0的7bit。

binaryreader 二進位制讀取器,派生自binary,主要具備對記憶體塊的讀取功能,比如協議中經常用到的read8 read24 read32等並且會根據構造時指定的位元組序進行轉換。

binarywriter 二進位制寫入器,派生自binary,是和binaryreader配合使用的乙個類。

buffer 這個間名之意,派生自binary,就是通過allocator申請記憶體塊操作。_offset操作位置,_data資料,_size資料長度,_capacity記憶體塊容量,_buffer指向記憶體塊指標,

這個類_capacity操作怪怪的,我一般設計buffer capacity一般是buffer的容量,所以一般不會變,這裡除了擴容,clip也跟著變。

bufferpool 記憶體池,次類派生自allocator,主要功能是申請記憶體塊及快取和釋放不超限的記憶體塊。構造的時候回引用到乙個定時器,當記憶體塊超過100時會釋放超過最大長度的塊及最小的100-x個記憶體塊,因為容器multimap有預設根據key公升序排序功能,10s檢測一次,能保證不用爆。

bufferpool.allocate查詢最大一塊合適的記憶體,如果沒有就申請一塊新的,返回記憶體位址及大小。

bufferpool.deallocate **記憶體塊。

byte 位元組序轉換類,派生自static,static為不能構造,拷貝構造,右值構造的類,意味著不能例項化。

cache 主要實現了雙向buffer鍊錶。

packet 這個類很重要,後面有大量的資料操作會使用到。

分析模式之分析

size medium color blue 可能有些人就會奇怪現在最熱的莫過於設計模式,而市面上關於設計模式的書層出不窮。但是我個人感覺設計模式是要看,但是你如果真正理解了分析模式那麼對於設計模式也就不難了。可以怎麼看分析模式是內涵而設計模式是外延而已。首先我先把我認為的分析模式闡述下 2.何為模...

迭代器之分析

筆者最近在分析stl系列原始碼,所取用的原始碼標準為sgi stl 2.9.0。筆者並不打算詳細分析stl的內部資料結構,因為資料結構這個課程為大學所學,筆者並不打算當一次復讀機。筆者個人認為分析stl原始碼最大的鐵板為迭代器,因為迭代器是stl容器和演算法兩大部件之間的橋梁,迭代器並不能單獨存在,...

資料分析之分布分析

aggresult data.groupby by 年齡 年齡 agg 可以看到分組已經成功,但是結果不直觀,從結果反映不出每個年齡的人數 進行數值分段處理 bins min data.年齡 1,20,30,40,max data.年齡 1 labels 20歲及以下 21歲到30歲 31歲到40歲...