摘要: 这张图说明了伪共享的问题:在核心1上运行的线程想更新变量X,同时核心2上的线程想要更新变量Y。不幸的是,这两个变量在同一个缓存行中。每个线程都要去竞争缓存行的所有权来更新变量。如果核心1获得了所有权,缓存子系统将会使核心2中对应的缓存行失效。当核心2获得了所有权然后执行更新操作,核心1就要使自己对应... 阅读全文
posted @ 2015-03-25 19:56 xuqiyu 阅读(238) 评论(0) 推荐(0) 编辑
摘要: 什么是内存屏障?它是一个CPU指令。它是这样一条指令: a)确保一些特定操作执行的顺序; b)影响一些数据的可见性(可能是某些指令执行后的结果)。插入一个内存屏障,相当于告诉CPU和编译器先于这个命令的必须先执行,后于这个命令的必须后执行。强制更新一次不同CPU的缓存。例如,一个写屏障会把这个屏障前... 阅读全文
posted @ 2015-03-25 19:46 xuqiyu 阅读(227) 评论(0) 推荐(0) 编辑
摘要: Disruptor相对于传统方式的优点:没有竞争=没有锁=非常快。所有访问者都记录自己的序号的实现方式,允许多个生产者与多个消费者共享相同的数据结构。在每个对象中都能跟踪序列号(ring buffer,claim Strategy,生产者和消费者),加上神奇的缓存行填充,就意味着没有为伪共享和非预期... 阅读全文
posted @ 2015-03-25 16:07 xuqiyu 阅读(127) 评论(0) 推荐(0) 编辑