引用来自于 http://ifeve.com/falsesharing/
下面是我的实现
总结下,伪共享在cpu物理线程(超线程影响较少)越多的情况下对性能影响越大
而且在调用次数较少的情况下影响不大,因此不应该对伪共享引起的性能下降过多关注
如果你只有cpu核心少于4个就不要测试了.
测试时候注意jvm参数,cg会影响测试结果!同样cpu的睿频也会影响结果!
jvm是否把对象分配在一个缓存行中是无法保证的,所以我们只能理解连续分配的内存有很大的可能在一个缓存行中!
我的jvm参数
-server -verbose:gc -Xms1500m -Xmx2024m
package io.grass.core.collect; import io.grass.util.StringUtils; import io.grass.util.TimeSpan; /** * jvm参数 !-server -verbose:gc -Xms1500m -Xmx2024m * 注意gc对垃圾回收的影响 * @author zuoge85 * */ public class FalseSharingTest { private static final int TEST_NUMS = 100000000; private static final int THREAD_NUMS = 4; public static void main(String[] args) throws InterruptedException { //测试伪装共享 test1(); System.out.println(StringUtils.center("sb", 90, '*')); test2(); } static LongWarp[] longs = new LongWarp[THREAD_NUMS]; static LongWarpPadded[] longPaddeds = new LongWarpPadded[THREAD_NUMS]; static{ for (int j = 0; j < THREAD_NUMS; j++) { longs[j] = new LongWarp(); } for (int j = 0; j < THREAD_NUMS; j++) { longPaddeds[j] = new LongWarpPadded(); } } public static void test1() throws InterruptedException{ Thread[] ts=new Thread[THREAD_NUMS]; for (int i = 0; i < ts.length; i++) { final int n = i; ts[i] = new Thread(){ public void run() { TimeSpan ts = new TimeSpan(); for (int j = 0; j < TEST_NUMS; j++) { longs[n].setI(longs[n].getI()+1); } String end = ts.end(); System.out.println("Thread"+n+":\t"+end+";end value:"+ longs[n]); } }; } for (int i = 0; i < ts.length; i++) { ts[i].start(); } for (int i = 0; i < ts.length; i++) { ts[i].join(); } } public static void test2() throws InterruptedException{ Thread[] ts=new Thread[THREAD_NUMS]; //final int[] ints = new int[THREAD_NUMS*1000]; for (int i = 0; i < ts.length; i++) { final int n = i; ts[i] = new Thread(){ public void run() { TimeSpan ts = new TimeSpan(); for (int j = 0; j < TEST_NUMS; j++) { longPaddeds[n].setI(longPaddeds[n].getI()+1); } String end = ts.end(); System.out.println("Thread"+n+":\t"+end+";end value:"+ longPaddeds[n]); } }; } for (int i = 0; i < ts.length; i++) { ts[i].start(); } for (int i = 0; i < ts.length; i++) { ts[i].join(); } } public static class LongWarp{ private volatile long i; public long getI() { return i; } public void setI(long i) { this.i = i; } @Override public String toString() { return "LongWarp [i=" + i + "]"; } } public static long sumPaddingToPreventOptimisation(final int index) { LongWarpPadded v = longPaddeds[index]; return v.p1 + v.p2 + v.p3 + v.p4 + v.p5 + v.p6; } public static class LongWarpPadded{ private volatile long i; public long p1, p2, p3, p4, p5, p6 = 7L; public long getI() { return i; } public void setI(long i) { this.i = i; } @Override public String toString() { return "LongWarpPadded [i=" + i + ", p1=" + p1 + ", p2=" + p2 + ", p3=" + p3 + ", p4=" + p4 + ", p5=" + p5 + ", p6=" + p6 + "]"; } } } package io.grass.util; import java.text.NumberFormat; /** * 测试时间 * * @author zuoge85 * */ public class TimeSpan { public TimeSpan(){ nf.setParseIntegerOnly(false); nf.setGroupingUsed(false); nf.setMaximumFractionDigits(6); nf.setMaximumFractionDigits(6); start(); avgTime = System.nanoTime(); } private long time; private long avgTime; public TimeSpan start() { time = System.nanoTime(); return this; } private NumberFormat nf = NumberFormat.getNumberInstance(); public String end() { return nf.format((System.nanoTime() - time) / 1000000000d); } // /** // * 平均时间 // * @param i // * @return // */ // public String avg(int i) { // return nf.format((System.nanoTime() - avgTime)/i / 1000000000d); // } }
相关推荐
7. **测试服务**:发布服务后,可以通过Geoserver的预览功能或任何支持WMS/WMTS的客户端(如QGIS、OpenLayers等)来查看和验证发布的伪3D效果。 8. **优化性能**:如果数据量大,可能需要考虑缓存策略,如使用WMTS...
- **码分多址 (CDMA)**:利用伪随机序列作为地址码,实现多用户共享同一频带的功能。 - **软件测试**:生成的伪随机序列可用于测试软件系统的稳定性和性能。 - **序列密码**:密钥流的随机性和不可预测性是决定序列...
总结来说,伪分布式Hadoop搭建是一个涉及环境配置、文件修改和服务启动的过程,它为开发者提供了一个在单机上模拟分布式计算的平台,便于学习和测试Hadoop的相关功能。通过这个过程,我们可以深入了解Hadoop的工作...
然而,正式的 Redis 集群配置相对复杂,对于测试或学习目的,我们可以通过一些伪集群工具来模拟多节点环境。标题中的“redis 单机的伪集群工具资源”指的就是这样一种解决方案,它能在单台机器上模拟出多个独立的 ...
【Hadoop 伪分布式搭建详解】 ...完成以上步骤后,你应该已经成功搭建了一个 Hadoop 2.6.5 的伪分布式环境,可以开始进行 Hadoop 相关的开发和测试工作。在实际环境中,确保对所有配置进行详细检查,以避免潜在的问题。
ABB双语言共享充电宝投资理财源码/五级分销返利+地图显示模式/vue编译后前端 测试环境:Linux系统CentOS7.6、宝塔、PHP7.3、MySQL5.6,根目录public,伪静态laravel5
这个程序可能是一个自同步PRBS发生器,能够生成连续的伪随机二进制序列,用于测试或仿真目的。"不记得在哪个论坛上下的"这句话暗示这是一个开源项目或者社区共享的资源,可能经过了其他用户的修改和优化。 【标签】...
Hadoop单机伪分布式安装 Hadoop 是一个开源的大数据处理框架,由 Apache 软件基金会开发和维护。Hadoop 的核心组件包括 HDFS(Hadoop Distributed File System)、MapReduce 和 YARN(Yet Another Resource ...
描 述:UrlReWrite(Url...然而这对于我们,没有很多的资金或使用的共享服务器,使得以上的方法都不是最佳的解决方案。幸而ASP.NET给我们提供了强大的可扩展性,能让我们自己定义页面的访问规则,很方便实现URL重写。
在这个系统中,可以设置多个小说文学类网站,统一管理,共享资源,提升整体流量。 3. **小说系统**:这是专为小说类内容设计的管理系统,包括但不限于小说分类、章节管理、用户评论、排行榜等功能,旨在提供一个...
2. **缓存冲突**:如果两个线程分别修改不同对象的相邻成员变量,它们可能位于同一缓存行,导致每次写操作都会使另一线程的缓存失效,这称为伪共享(False Sharing)。这会导致不必要的缓存刷新和额外的通信开销,...
DPCCH(高速专用物理控制信道)、HS-PDSCH(高速物理下行共享信道)、HS-SCCH(高速共享控制信道)、Iblocking()等。 通过了解这些缩略语和术语,可以更好地理解WCDMA射频测试的技术要求和测试方法,提高WCDMA...
rupd_context的),防止出现多核机器上出现伪共享问题. 在自己机器上测试速度稳定达到16Gbit,叫上一版本较稳定(上一版本有较大波动). thread context switch 平局值在5W次左右,比起之前的20W此有非常大的提升,可以...
这通常是为了学习和测试目的,因为完全分布式集群在本地开发环境中可能会比较复杂。在伪分布式模式下,所有的Zookeeper服务都运行在同一台机器上,但每个服务都有独立的数据存储和配置,这样可以模拟多节点的交互...
还没有测试的是chche伪共享造成的性能下降,在后面将测试. 设置代码中 DEFAULT_RUDP_BUFFER_SIZE = 32k(实际udp包远没有这么大),用vc6及vc8编译,在我的机器:thinkpad x200,(2.56G双核cpu,4G DDR3内存),win7 旗舰版,...
多个小区可以共享频谱资源,实现高效利用。 3. **控制平面与用户平面**: 控制平面处理信令和控制信息,用户平面则承载用户数据,两者分离设计,提高网络效率。 **三、WCDMA测试方法** 1. **网络性能测试**: 包括...