开发
文章平均质量分 76
chenxinl
这个作者很懒,什么都没留下…
展开
-
hadoop streaming 技术整理
这两年零零散散用hadoop做了些项目,也看了些hadoop相关资料,每回都是现学现用。这回做kbuild项目,要用到hadoop streaming,发现很多东西又忘了,趁这次机会把hadoop相关的知识再过一遍整理下。hadoop由两部分构成,分布式文件系统hdfs,和并行计算框架map-reduce。做应用开发,都是跟map-reduce打交道;hdfs逻辑上相对来说比较简单,可以参考:原创 2011-10-23 21:34:50 · 1714 阅读 · 0 评论 -
c++11的std::memory_order
首先明确一点,std::atmoic和std::memory_order只有在多cpu多线程情况下,无锁编程才会用到。在x86下,由于是strong memory order的,所以很多时候只需要考虑编译器优化的memory order;保险起见,可以用std::atomic,他会同时处理编译器优化和cpu的memory reorder(虽然x86用不到)。在除非必要的情况下,不用使用std::m原创 2012-08-21 11:22:37 · 4558 阅读 · 0 评论 -
Memory Ordering at Compile Time
转载自:Memory Ordering at Compile Time这篇文章解释了我很多疑惑,绝对好文!关键点:1. 编译器优化时会调整代码顺序,但优化有一个原则:保证该程序单线程时运作正确。2. 写单线程程序时,一般不会注意到memory reorder,因为编译器优化原则。写多线程程序时,一般也不会对此特加注意,因为当使用mutex,semaphore时,编译器会在这些调转载 2012-08-21 11:06:58 · 2829 阅读 · 0 评论 -
ByteBuffer实现解析 Direct vs Heapped性能比较
ByteBuffer封装了一个实现类,可以方便的把java基础数据类型(short, int, long, float, double)转换成byte数组形式,反之亦然;做二进制数据的生成和读取时,会特别有用。实现上,整型数可以通过移位获取各个字节,然后写到byte数组中即可;而浮点型没办法直接获得字节数据,只能通过Float.floatToIntBits(详细参见java api)类似的方法原创 2012-04-25 12:03:09 · 2821 阅读 · 1 评论 -
std string的内存共享和Copy-On-Write技术
转载自:http://blog.csdn.net/haoel/article/details/24058看到google leveldb的代码大量使用std::string,想知道这个基础数据结构怎么实现的,看了下stl的string源代码,太烦了;找到这篇文章,写的很清楚,记录下。读完照例总结下:string对象间是会共享内存(与share memory是不同的概念)的,修改时使用了转载 2012-03-14 19:19:59 · 3042 阅读 · 0 评论 -
分布式系统中的异步IO与线程池
关于异步IO及链接复用分布式搜索系统中,一般都有merge和search两种角色,分别部署在不同的机器上。由于数据量巨大,每台search只能加载部分索引数据,多台search机器合在一起组成全量索引。一个查询为了获得正确结果,需要把这个查询发给所有的search机器,经过检索后,再把所有search机器的结果聚合在一起,产生最终的正确结果;这个分发再聚合的过程,就是由merge来实现的。原创 2012-02-21 21:12:15 · 2646 阅读 · 0 评论 -
如何“打败”CAP定理
这篇文章,为大家提供了一个新的思路;想到核心组搞的oceanbase,实现原理跟这个如出一辙,把CRUD变成CR,数据分成不可变批量和实时增量两个部分。有时间看下oceanbase。文 / Nathan Marz 译 / 方建CAP定理是数据系统设计的基本理论,目前几乎所有的数据系统的设计都遵循了这个定理。但CAP定理给目前的数据系统带来了许多复杂的、不可控的问题,使得数转载 2011-12-20 17:21:25 · 2339 阅读 · 0 评论 -
hadoop map-reduce数据过程
对上一篇的补充,介绍map-reduce之间数据的流通,主要代码都在MapTask.java和ReduceTask.java两个文件中。mapper的output.collect有两个分支,如果reduce number=0,则调用outputformat的recordwriter直接把key-value写到hdfs上。如果不为0,则key-value首先被记录在内存中(io.sort.mb)原创 2011-10-24 00:10:26 · 3102 阅读 · 1 评论 -
关于单CPU,多CPU上的原子操作
比如test_and_set一个变量(是个单指令操作),在单CPU下是安全的,在CPU切换时,要么这个指令已经结束,要么还没开始执行。但是对于多CPU,有可能多个CPU都对一个变量做set,并成功。spinlock锁总线就是为了保证,多个cpu不能同时操作一块内存。 mutex的锁在做锁判断的时候,也会去锁一次总线;只是后面的处理逻辑与mutex不同。 逻辑上,所有原子操作都显式使用或隐含使用了一转载 2011-11-15 10:06:07 · 3115 阅读 · 0 评论 -
c++和java中的atomic/volatile
看到两篇不错的文章,分别介绍atomic和olatile关键字在java和c++中的表现,很不错。long count = 0;for(int i=0; i<1000; i++) count++;这段代码在c++中,经过编译后,count会被优化到寄存器中,++的操作也都是针对寄存器的;如果加上volatile关键字,可以保证count不会被优化到寄存器,每次都走内存;如果使用a转载 2013-05-05 13:25:55 · 2788 阅读 · 0 评论