env是乙個介面類,提供了基本的系統訪問介面,如操作檔案,執行緒等。
leveldb在util中實現了posixenv,實現上述介面
首先定義了幾個基本型別
sequentialfile,提供順序讀方法的介面類
randomaccessfile,提供隨機讀方法的介面類
writablefile, 提供順序寫方法的介面類
env介面類定義了以下介面
建立檔案控制代碼寫檔案
建立/刪除資料夾
檔案lock/unlock
posix 的實現
posix實現了env的含義分兩個方面:1,實現了posix版本的randomaccessfile,sequentialfile等,2,實現了posixenv類,繼承env
另外,env定義了在後台執行執行緒執行後台任務的介面
posixenv::schedule(void (function)(void), void* arg)
這個函式會將function和arg包裝成為乙個bgitem,放到乙個佇列中,在這之前啟動(如果已經存在,就不啟動)乙個後台程序,是任務的消費者,死迴圈的來消費此佇列中的任務。
當使用pthread_create來建立乙個執行緒,並使用物件方法來作為入口函式時,沒有辦法傳遞this指標,所以應該定義乙個static function,接收this指標,然後執行對應的成員方法
class posixenv
void bgthread()
}}
leveldb 原始碼導讀
1,slice.h中slice是leveldb內部使用的字串類,很簡單 2,leveldb 儲存編碼 對於位元組儲存分大端小端位元組序還是小端小端位元組序 leveldb使用的是小端位元組序儲存,低位位元組排放在記憶體的低位址端,高位位元組排放在記憶體的高位址端。編碼分為變長的varint和固定大小...
leveldb原始碼分析1
leveldb是乙個key value型的儲存引擎,由google開發,並宣布在bsd許可下開放源 plain git clone plain cd leveldb make all 此時生成libleveldb.a庫檔案。拷貝leveldb的標頭檔案到 usr include下 plain cp ...
levelDB原始碼分析 SSTable
sstable是bigtable中至關重要的一塊,對於leveldb來說也是如此,對leveldb的sstable實現細節的了解也有助於了解bigtable中一些實現細節。本節內容主要講述sstable的靜態布局結構,sstable檔案形成了不同level的層級結構,至於這個層級結構是如何形成的我們...