• 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等方法支持并发性更高的訪问,由于一些优化后的链接队列算法能将队列头节点的更新 操作与尾节点的更新操作分享开来。因此假设算法能通过多运行一些内存分配操作来减少竞争 程度,那么这样的算法通常具有更高的可伸缩性。



    版权声明:本文博客原创文章。博客,未经同意,不得转载。

  • 相关阅读:
    C/C++一些库函数的实现
    约瑟夫环问题(Josephus)
    union关键字及大小端模式
    指针数组和数组指针
    巧用位运算
    C/C++生成可执行文件过程
    C语言+Modbus+NXP整体规划
    bug和待完善
    python学习第二课
    python学习第一课
  • 原文地址:https://www.cnblogs.com/zfyouxi/p/4721110.html
Copyright © 2020-2023  润新知