中国建设银行广东分行网站,网站即将 模板,影楼化妆师,重庆的电子商务网站Level DB是高效的k-v数据库#xff0c;接受多线程写#xff0c;既要保证多线程写临界区安全#xff0c;同时又要保证写流程的尽量高效性。
写入数据
Level DB 用一个deque用来衔接生产-消费模型。一个新的kv写入请求#xff0c;会先将kv封装成Writer结构体。插入之前要先…Level DB是高效的k-v数据库接受多线程写既要保证多线程写临界区安全同时又要保证写流程的尽量高效性。
写入数据
Level DB 用一个deque用来衔接生产-消费模型。一个新的kv写入请求会先将kv封装成Writer结构体。插入之前要先获得mutex独占deque从尾部插入*writer插入后随即信号量进入wait状态等待被唤醒处理这个时候线程状态被挂起。 图1. 写入数据
数据处理
当进入数据处理流程中这时deque 头部的*writer信号量被唤醒这个时候获得mutex并且独占deque。这个时候遍历deque计算批量处理数据result如图2所示。 图2准备批量处理
当待处理的数据量达到阈值开始进行数据处理并释放mutex。这个时候等待插入数据的线程又可以获得mutex这个线程获得deque可以再次插入数据。这个时候两边是并行的提高系统的计算效率如图3所示。 图3. 计算批量处理
计算完成批量处理后释放已经在deque中处理好的kv对如图4所示。 图4. 完成批量处理
上面的流程是持续反复的不断进行用户端kv的写入。