Java 测试并行编程(三)
有很多其他的交替运行
因为在并行代码中的错误一般是低概率事件。因此,试运行并发差错时需要反复多次,但是,有很多方法可以提高发现这些错误的概率 ,在前面提到的,在多处理器系统。假设 线程的数量,那么 与单处理器的系统 或者 包括多个处理器的系统相比。将能产生很多其它的交替行为。
有一种实用的方法能提高交替操作的数量。以便能更有效的搜索程序的状态空间:就是在訪问状态的操作中加上Thread.yield作为一个空操作。
当代码在訪问状态的时候没有使用足够的同步,将存在一些对运行时序敏感的错误。通过在某个操作的运行过程 中调用yield方法,能够将这些错误暴露出来。
这样的方法须要在測试 中加入一些调用而且在正式产品吕删除这些调用 。
public synchronized void tranferCredits(Account from,Account to,int amount) {
from.setBalance(from.getBalance()-amount);
if (random.nextInt(1000)>THRESHOLD) {
Thread.yield();
}
to.setBalance(to.getBalance()+amount);
}
性能測试
性能測试要符合当前程序的应用场景。理想情况下应该反映出被測试对象的在应用程序中的实际使用方法。
第二个目标就是依据经验值来调整各种不同的限值。比如线程数量,缓存容量等等。这些限值都依赖于平台特性,我们通常要合理的选择这些值,使程序可以在很多其它的系统上良好的执行。
多种算法的比較
測试结果表明。LinkedBlockgingQueue的可伸缩性要高于ArrayBlockingQueue,初看起来这个结果似乎有些奇怪,链表队列在每次插入元素时,都必须分配一个链表节点对象 ,这似乎比基于数组的队列相比,链表队列的put和take等方法支持并发性更高的訪问,由于一些优化后的链接队列算法能将队列头节点的更新 操作与尾节点的更新操作分享开来。因此假设算法能通过多运行一些内存分配操作来减少竞争 程度,那么这样的算法通常具有更高的可伸缩性。
版权声明:本文博客原创文章。博客,未经同意,不得转载。
Java 测试并行编程(三)的更多相关文章
- 【读书笔记】.Net并行编程(三)---并行集合
为了让共享的数组,集合能够被多线程更新,我们现在(.net4.0之后)可以使用并发集合来实现这个功能.而System.Collections和System.Collections.Generic命名空 ...
- .Net多线程 并行编程(三)---并行集合
为了让共享的数组,集合能够被多线程更新,我们现在(.net4.0之后)可以使用并发集合来实现这个功能. 而System.Collections和System.Collections.Generic命名 ...
- Python并行编程(三):线程同步之Lock
1.基础概念 当两个或以上对共享内存操作的并发线程中,如果有一个改变数据,又没有同步机制的条件下,就会产生竞争条件,可能会导致执行无效代码.bug等异常行为. 竞争条件最简单的解决方法是使用锁.锁的操 ...
- Java并发编程三个性质:原子性、可见性、有序性
并发编程 并发程序要正确地执行,必须要保证其具备原子性.可见性以及有序性:只要有一个没有被保证,就有可能会导致程序运行不正确 线程不安全在编译.测试甚至上线使用时,并不一定能发现,因为受到当时的 ...
- 20175316盛茂淞 《java程序设计》第三周课堂测试错题总结
20175316盛茂淞 <java程序设计>第三周课堂测试错题总结 出现问题 错题总结 题目1 在Ubuntu中用自己的有位学号建一个文件,教材p87 Example4_15 1. 修改代 ...
- Java 并行编程!
多核处理器现在已广泛应用于服务器.台式机和便携机硬件.它们还扩展到到更小的设备,如智能电话和平板电脑.由于进程的线程可以在多个内核上并行执行,因此多核处理器为并发编程打开了一扇扇新的大门.为实现应用程 ...
- Java:并行编程及同步使用方法
知道java可以使用java.util.concurrent包下的 CountDownLatch ExecutorService Future Callable 实现并行编程,并在并行线程同步时,用起 ...
- 三 GPU 并行编程的运算架构
前言 GPU 是如何实现并行的?它实现的方式较之 CPU 的多线程又有什么分别?本文将做一个较为细致的分析. GPU 并行计算架构 GPU 并行编程的核心在于线程,一个线程就是程序中的一个单一指令流, ...
- 转载 三、并行编程 - Task同步机制。TreadLocal类、Lock、Interlocked、Synchronization、ConcurrentQueue以及Barrier等
随笔 - 353, 文章 - 1, 评论 - 5, 引用 - 0 三.并行编程 - Task同步机制.TreadLocal类.Lock.Interlocked.Synchronization.Conc ...
随机推荐
- CentOS7.0 安装JAVA周围环境
CentOS7.0 安装JAVA周围环境 安装JDK 1.配置JDK环境变量 把下载好的JDK(jdk-7u75-linux-x64.gz)文件上传到 Reg: /home/p2pweb/java/ ...
- MVC5+EF6 入门完整教程 总目录
本系列文章会从一个主干开始,逐渐深入,初步规划30篇.初级10篇,中级10篇,综合项目实战10篇 初级10篇 MVC5+EF6 入门完整教程10:多对多关联表更新&使用原生SQL@201505 ...
- c# winfrom DataGridView使行高不可改变,使列头高度不可改变,
// 禁止用户改变DataGridView1的所有列的列宽 //DataGridView1.AllowUserToResizeColumns = false; //禁止用户改变DataGridView ...
- uitextField单词的方法和抖动的限制
这种方法还可以找到在线. 如下面的详细信息: .h文件 #import <UIKit/UIKit.h> @interface UITextField (LimitLength) /** * ...
- 交互式命令 expect
shell尽管很强大.但是貌似无法完成交互式命令的操作,实例 ssh host 如果host而且该机没有加入信任.手动输入的时间需要password. 这样的情况下可以使用expect支持. 下面举个 ...
- 查询系统--基于Solr4.9.0实现
为什么非要搜索系统 随着在产品的数量的增长.和复杂的检索要求,直接从数据库中检索信息,它已经无法满足展示机搜索需求. 实例: keyword=%E8%8B%B9%E6%9E%9C&enc=ut ...
- c#基于这些,你已经看到了?(一)-----谁才刚刚开始学习使用
1.注视(不要写的目光是流氓,从废话名盲人) '///'一般用于目光功能.凝视类. 2.热键 ctrl+k+d(有语法错误无法进行对齐) ctrl+j(高速弹出仅仅能提示) shift+end,shi ...
- stringstream转换CString为string出错
使用stringstream转换CString为string时,调试时发现是CString赋给stringstream没有问题,stringstram赋给string就不行,倒也不是没有赋成功,只是赋 ...
- SQL Server安全性专题一:简介
原文:SQL Server安全性专题一:简介 一. 安全威胁与法则 1. 安全定义 2. 安全威胁 3. 安全法则 安全定义: 在SQLServer环境中,安全性可以认为是[数据保护].包括: 数 ...
- java它们的定义jar套餐读Excel(这包括2003和2007)数据,和实例
使用java它们的定义jar套餐读excel数据支持excel2007和excel2003 在http://download.csdn.net/detail/u010792467/8079355下载所 ...