leveldb/rocksdb采用deque控制多线程只允许一个线程修改memtable, 是由于memtable不存在读-写冲突(采用MVCC,保证Sequence一定不同,memtable的key就一定不同,update/delete/insert操作一定不会修改已有key的数据)
这样只存在写-写冲突,只需要保证memtable只有一个写,就能保证线程安全。
这里使用一个deque,把所有线程的写write_batch放入这个deque中,只允许队头的线程写memtable,其他线程cv.wait,从而保证只有一个线程写。
而且其他线程在入队cv.wait等待同时,队头的线程还会进行合并其他线程的write_batch,这样就能以最小的代价保证整体系统的线程安全,提高系统的吞吐。
标签:memtable,leveldb,deque,rocksdb,保证,线程 From: https://www.cnblogs.com/lygin/p/17116884.html