无锁HashMap的原理与实现
转载自:http://coolshell.cn/articles/9703.html在《疫苗:JavaHashMap的死循环》中,我们看到,java.util.HashMap并不能直接应用于多线程环境。对于多线程环境中应用HashMap,主要有以下几种选择:使用线程安全的java.util.Hash
lock free数据结构内存回收技术-hazard pointer
lockfree数据结构一般来说拥有比基于lock实现的数据结构更高的性能,但是其实现比基于lock的实现更为复杂,需要处理的难题包括预防ABA问题,内存如何重用和回收等。通常,最简单最有效的处理ABA问题的方法是在目标内存区域加入一个tag,每次目标内存区域被更新或者被重用时增加tag。线程最后一
并发写Btree原理剖析
OceanBase0.4的UpdateServer存储引擎使用了一棵可以多线程并发修改的BTree,读写不冲突,由颜然开发。线上运行稳定。UpdateServer存储引擎采用类leveldb的方式,最近的更新操作都写入内存中的一个活跃memtable,当活跃memtable占用内存达到某个阈值时,即
The Go scheduler
转载自:http://morsmachine.dk/go-schedulerIntroductionOneofthebigfeaturesforGo1.1isthenewscheduler,contributedbyDmitryVyukov.Thenewschedulerhasgivenadrama
goroutine背后的系统知识
转载自:http://www.sizeofvoid.net/goroutine-under-the-hood/Go语言从诞生到普及已经三年了,先行者大都是Web开发的背景,也有了一些普及型的书籍,可系统开发背景的人在学习这些书籍的时候,总有语焉不详的感觉,网上也有若干流传甚广的文章,可其中或多或少总
Raft一致性协议
分布式存储系统通常通过维护多个副本来进行fault-tolerance,提高系统的availability,带来的代价就是分布式存储系统的核心问题之一:维护多个副本的一致性。一致性协议就是用来干这事的,即使在部分副本宕机的情况下。Raft是一种较容易理解的一致性协议。一致性协议通常基于replica
The Secret To 10 Million Concurrent Connections -The Kernel Is The Problem, Not The Solution
转载自:http://highscalability.com/blog/2013/5/13/the-secret-to-10-million-concurrent-connections-the-kernel-i.htmlNowthatwehavetheC10Kconcurrentconnectio
OceanBase使用libeasy原理源码分析:客户端
这篇主要写libeasy作为客户端的情形。结合OceanBase0.4的mergeserver使用libeasy的情况进行分析,mergeserver请求chunkserver是异步请求,chunkserver使用update是同步请求,在libeasy中,同步请求是通过异步请求来实现。使用libe
OceanBase使用libeasy原理源码分析:服务器端
libeasy是个网络框架,这个网络框架基于事件驱动模型,libeasy可以有多个网络I/O线程,每个网络I/O线程一个eventloop,事件驱动模型基于开源的libev实现。我认为,libeasy不同于其它的网络框架比如tbnet,muduo。tbnet,muduo等网络框架的目的就是向应用层暴
libev 源码浅析
libev是一个开源的事件驱动库,基于epoll,kqueue等OS提供的基础设施。其以高效出名,它可以将IO事件,定时器,和信号统一起来,统一放在事件处理这一套框架下处理。libev的基本使用方法如下:intmain(void){//usethedefaulteventloopunlessyouh
函数调用和函数返回 栈变化情况
本文是在Linuxwudi-VirtualBox2.6.38-8-generic#42-UbuntuSMPMonApr1103:31:50UTC2011i686i686i386GNU/Linux上面试验的,32bitcpu,32bitos