JAVA是我用过的语言中对多线程支持最好的

JAVA 6是06年底发布的。2006年啊!!那时候我还没大学毕业呢,小毛孩一个!JAVA是个跨平台的东西,它能屏蔽底层硬件差异而提供一个统一的内存模型,这点十分了不起!换句话说,想用JAVA写出高性能的程序,并不必怎么了解CPU架构,而且,06年的时候,Intel还没有Nehalem呢!!!我最近一直在看那本《The Art of Multiprocessor Programming》,今天终于看到SkipList了。然后我在想,如果用SkipList实现一个Map,然后用它来管理cache,该多好啊?结果,结果,发现JAVA 6在发布的时候已经实现了这个了 ,ConcurrentSkipListMap,那时5年前了啊!关键是,人家的标准库,真的是该有的都有了,而不是像pthreads那样,除了mutex/condition variable之外一无所有。不过JDK中满足non-blocking性质的数据结构没几个,我知道就ConcurrentLinkedQueue、ConcurrentHashMap、ConcurrentSkipListMap、ConcurrentSkipListSet这么四个。目前我所看过的所有paper也都集中在链表、hash map以及skip list上。我本想用ConcurrentSkipListMap来管理cache,但是ConcurrentSkipListMap有个缺点,它的size方法是O(n)的。这个给做lru带来了麻烦。于是,我不能每次insert的时候都检查一下是否达到capacity上限了。

如果你自认为精通“JAVA”或“数据结构”或“多线程编程”中的任何一个,那么去看看ConcurrentSkipListMap的代码吧,一定会被惊倒的!我觉得我有生之年写不出这么优秀的东西…… 嗯,但是我读懂了一个关键点:为数据结构设计并发算法的时候,核心在于找到那个不变的东西!无论数据怎么插怎么删,总有一个性质,始终保持不变!

此博客中的热门博文

在windows下使用llvm+clang

少写代码,多读别人写的代码

tensorflow distributed runtime初窥