- 博客(9)
- 资源 (1)
- 收藏
- 关注
原创 百度的bfs中raft协议实现(2)
raft中另外一个问题就是log存储了,像360开源的floyd直接是使用的leveldb,选举状态相关存储也是leveldb。leveldb作为一个嵌入式的kv库自然是能很好的完成这样的功能,本着从学习的角度读了下bfs的log相关代码。抛开代码,如果自己设计,应该从什么角度考虑?1.log存储的东西有什么? 对raft而言,需要存储的是大量的(seq, value)和极少量
2018-01-23 18:00:07 532
原创 百度的bfs中raft协议实现(1)
raft具体原理就不说了,在这里只分析下百度bfs中的代码实现。为了使用不同的同步协议,bfs中把同步抽象了接口,实现方面一个是传统的主从(带快照,类似mysql dump数据+GTID同步方式),一个就是raft了。具体抽象接口如下:class RaftImpl : public Sync {public: RaftImpl(); ~RaftImpl();
2018-01-22 17:23:27 600
原创 thrift(1):TNonblockingServer分析
先看下工作模型这个模型很多库也是类似做法,比如muduo也是类似概述:主线程 + iothread + work池模式简单分析下主要类的功能和流程:TNonblockingIOThread:IO线程(主线程),运行着libevent的主循环主要成员包括 主线程指针,listensocket,pipefd等入口: serve()创建监听套接字,启动ioth
2016-04-27 18:43:37 710
原创 unity 语音开发中遇到的一些问题
最近被迫做一些前端开发工作,遇到几个问题,google上甚至难找到完整方案,在此记录下。1.在IOS调Microphone.Start(),报错问题(程序卡死),见描述: http://answers.unity3d.com/questions/711211/crash-on-microphonestart-in-audiomanagergetrecordp.html 解决:首先确实
2015-12-10 20:49:19 762
原创 跳表的一种实现
跳表的原理就不写了,主要记录下实现中遇到的问题。1.插入的新节点时分配高度:原本以为高度是随机的且越随机越好,于是简单的写下height = rand() % maxheight + 1,当然也不会报错什么的。但写完后和map一对比,数据规模2W时已经要比map要慢个10倍左右,而且随着数据增大,时间也不是对数级增长(花费更多时间),这和理论结果不符。想了想为什么跳表平均情况下能和rbtree
2015-07-07 23:12:47 532
原创 打印(复合)容器内容的代码.
近期写一些代码经常需要打印出容器结果,主要是给自己看看结果正确性。不想每次自己写几层for,所以写了下面的代码。templatevoid printcon(T& con, const string& split = " "){ _PrintImpl::template impl(con, split);}templatestruct _PrintValue{ templa
2015-05-13 13:27:57 397
原创 stdext::hash_set剖析,env:vs08 sp1
hash表对我来说是闻名不见面,因为stl提供的基于rbtree的容器目前是满足我的工作需求的。最近闲得慌,于是看看非标准(C98)扩展的容器hash_set的实现,另外我所知道使用hash表的还有MFC里的CMap。源码基于VS2008 SP1。为了表达明确,假设比较器为less。insert1.如果此bucket的hash值【有】对应元素:取bucket+1是因为相
2014-07-07 20:12:33 1301
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人