12 2013 档案

摘要:转载自:http://coolshell.cn/articles/9703.html在《疫苗:Java HashMap的死循环》中,我们看到,java.util.HashMap并不能直接应用于多线程环境。对于多线程环境中应用HashMap,主要有以下几种选择:使用线程安全的java.util.Hashtable作为替代。使用java.util.Collections.synchronizedMap方法,将已有的HashMap对象包装为线程安全的。使用java.util.concurrent.ConcurrentHashMap类作为替代,它具有非常好的性能。而以上几种方法在实现的具体细节上,都或 阅读全文
posted @ 2013-12-29 12:49 吴镝 阅读(1301) 评论(0) 推荐(0)
摘要:lock free数据结构一般来说拥有比基于lock实现的数据结构更高的性能,但是其实现比基于lock的实现更为复杂,需要处理的难题包括预防ABA问题,内存如何重用和回收等。通常,最简单最有效的处理ABA问题的方法是在目标内存区域加入一个tag,每次目标内存区域被更新或者被重用时增加tag。线程最后一次读取目标内存区域后tag没有改变,CAS操作才能成功。比如对于无锁链表来说,目标内存区域就是链表节点。 但是,在目标内存区域中包含tag这种方法,当所有线程都不再需要使用某块内存区域时,没有机制可以检测。这也就导致这块内存区域不能被释放给系统供其他模块使用。hazard pointer可以用.. 阅读全文
posted @ 2013-12-28 17:50 吴镝 阅读(2418) 评论(1) 推荐(0)
摘要:OceanBase 0.4的UpdateServer存储引擎使用了一棵可以多线程并发修改的BTree,读写不冲突,由颜然开发。线上运行稳定。UpdateServer存储引擎采用类leveldb的方式,最近的更新操作都写入内存中的一个活跃memtable,当活跃memtable占用内存达到某个阈值时,... 阅读全文
posted @ 2013-12-06 16:55 吴镝 阅读(3819) 评论(0) 推荐(1)