`
cloudeagle_bupt
  • 浏览: 585097 次
文章分类
社区版块
存档分类
最新评论

一次失败的Hama改进经历

 
阅读更多

注意到IncomingVertexMessageManager (Hama0.7.1)类中有如下代码:


  @Override
  public GraphJobMessage poll() {
    if (mapMessages.size() > 0) {
      return mapMessages.poll();
    } else {
      if (storage.size() > 0 && it.hasNext()) {
        GraphJobMessage m = it.next();
        it.remove();
        return m;
      } else {
        return null;
      }
    }
  }

从理论上说,一边读取一边删除效率较低,不如一次性读取后全部删除,测试代码如下:


package concurrencyTest;

import java.util.Iterator;
import java.util.concurrent.ConcurrentHashMap;



public class ConcurrencyReadTest {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		ConcurrentHashMap<Integer, Integer>  map = new ConcurrentHashMap<Integer, Integer>() ;
		for(int i=0;i<1000000 ; i++)
			map.put(i, i+111111) ;
		
		long start = System.currentTimeMillis() ;
		Thread t1 = new Thread(new Worker(map)) ;
		
		t1.start(); 
		
		try {
			t1.join() ;
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
//		map.clear() ;
		System.out.println("Read last : " + (System.currentTimeMillis() - start) + " ms");
	}
}

class Worker implements Runnable {
	ConcurrentHashMap<Integer, Integer>  sharemap ;
    int num = 0 ;
	
	public Worker(ConcurrentHashMap<Integer, Integer> map) {
		sharemap = map ;
	}
	
	@Override
	public void run() {
		 it = sharemap.values().iterator();
		 Integer i = poll(); 
		 while(i!=null) {
			 i = poll() ;
			 num++ ;
		 }
		 System.out.println(Thread.currentThread().getName() + " poll " + num + " elements! ShareMap size: " + sharemap.size() );
	}
	

	Iterator<Integer> it;

	public Integer poll() {
		     if (sharemap.size() > 0 && it!=null && it.hasNext()) {
		         Integer m = it.next();
		         it.remove();
		         return m;
		       } else {
		         return null;
		       }
	}
}

测试三次结果: 187,172, 172

将代码修改如下:

package concurrencyTest;

import java.util.Iterator;
import java.util.concurrent.ConcurrentHashMap;



public class ConcurrencyReadTest {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		ConcurrentHashMap<Integer, Integer>  map = new ConcurrentHashMap<Integer, Integer>() ;
		for(int i=0;i<1000000 ; i++)
			map.put(i, i+111111) ;
		
		long start = System.currentTimeMillis() ;
		Thread t1 = new Thread(new Worker(map)) ;
//		Thread t2 = new Thread(new Worker(map)) ;
		
		t1.start(); 
//		t2.start();
		
		try {
			t1.join() ;
//			t2.join();
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
		map.clear() ;
		System.out.println("Read last : " + (System.currentTimeMillis() - start) + " ms");
	}
}

class Worker implements Runnable {
	ConcurrentHashMap<Integer, Integer>  sharemap ;
    int num = 0 ;
	
	public Worker(ConcurrentHashMap<Integer, Integer> map) {
		sharemap = map ;
	}
	
	@Override
	public void run() {
		 it = sharemap.values().iterator();
		 Integer i = poll(); 
		 while(i!=null) {
			 i = poll() ;
			 num++ ;
		 }
		 System.out.println(Thread.currentThread().getName() + " poll " + num + " elements! ShareMap size: " + sharemap.size() );
	}
	

	Iterator<Integer> it;

	public Integer poll() {
		     if (sharemap.size() > 0 && it!=null && it.hasNext()) {
		         Integer m = it.next();
//		         it.remove();
		         return m;
		       } else {
		         return null;
		       }
	}
}

测试三次结果: 140,124, 140

可见确实快了。


但是将这种改进应用到Hama中,统计总的计算时间 出现:

新版:

16/09/24 16:20:20 INFO graph.GraphJobRunner: totalBroasdCastTime: 1793 totalSyncTime: 9219 totalLoopingTime: 13059
16/09/24 16:21:30 INFO graph.GraphJobRunner: totalBroasdCastTime: 2008 totalSyncTime: 9699 totalLoopingTime: 12834
16/09/24 16:22:47 INFO graph.GraphJobRunner: totalBroasdCastTime: 1909 totalSyncTime: 9192 totalLoopingTime: 12634

老版

16/09/24 16:32:22 INFO graph.GraphJobRunner: totalBroasdCastTime: 1993 totalSyncTime: 8351 totalLoopingTime: 13387
16/09/24 16:34:28 INFO graph.GraphJobRunner: totalBroasdCastTime: 1582 totalSyncTime: 8635 totalLoopingTime: 12827
16/09/24 16:35:39 INFO graph.GraphJobRunner: totalBroasdCastTime: 1679 totalSyncTime: 8543 totalLoopingTime: 12836


但是在最后总的时间总,还是老版略快些,不知道原因,猜测是否因为提前删除导致可用内存增大,性能提升?


分享到:
评论

相关推荐

    海马记词语-海马记词语-海马记词语 绿色软件

    海马记词语 海马记词语-海马记词语-海马记词语 绿色软件

    3_海马分割_海马体分割_matlab磁共振_matlab_医学图像_

    在医学成像领域,海马体分割是一项至关重要的任务,特别是在神经科学研究和临床诊断中。海马体是大脑中负责记忆、情感处理和空间导航的关键结构。本项目聚焦于使用MATLAB来处理磁共振(MRI)图像,进行精确的海马体...

    海马E3汽车使用手册用户操作图解驾驶车主车辆说明书电子版下载.doc

    海马E3电动汽车作为一款新型的环保出行工具,在为车主带来便利...无论是新车主还是有经验的驾驶者,都应该将这份手册作为日常驾驶和维护的重要参考,通过认真学习和遵循手册的建议,让每一次出行都变得更加安全和舒心。

    cocos2dx iOS海马支付平台Demo

    总之,集成cocos2dx iOS海马支付平台是一个涉及多个步骤的过程,需要对cocos2dx、iOS开发和第三方支付平台有一定的理解。通过遵循以上步骤并不断优化,您可以为您的游戏增加一个可靠且易用的支付系统。

    海马V70汽车使用手册用户操作图解驾驶车主车辆说明书pdf电子版下载.pdf

    1. 车辆概述:这部分会详细介绍海马V70的基本信息,包括车辆型号、尺寸、重量、性能参数等,以及外形和内饰特点,让车主对车辆有一个初步的认识。 2. 安全事项:强调在驾驶和操作海马V70时必须遵守的安全规则,包括...

    海马优化器2022新出的算法

    海马优化器2022新出的算法 海马优化器2022新出的算法 海马优化器2022新出的算法 海马优化器2022新出的算法 海马优化器2022新出的算法 海马优化器2022新出的算法 海马优化器2022新出的算法 海马优化器2022新出的算法

    海马S5汽车使用手册用户操作说明书pdf电子版下载.pdf

    海马S5汽车是一款由海马汽车公司生产的SUV车型,该款车型的操作手册详细介绍了汽车各个部件的功能、操作方法以及注意事项。以下是根据提供的文件内容提炼出的知识点: 1. 海马S5汽车的仪表盘使用了多种图标和符号来...

    海马M6汽车使用手册用户操作说明书pdf电子版下载.pdf

    海马M6汽车用户操作说明书是一份指导用户如何正确使用和保养海马M6系列乘用车的详细文档。该说明书包含了海马M6系列乘用车的型号介绍、车辆结构特点、使用方法、保养规范等核心内容。使用说明书为车主提供了必要的...

    海马模拟器安装包

    海马模拟器是一款高效、功能强大的安卓应用模拟器,它允许用户在个人电脑上运行安卓应用程序和游戏。这款模拟器的出现,为那些希望在大屏幕或者使用键盘鼠标操作安卓应用的用户提供了便利。下面我们将深入探讨海马...

    海马2丘比特汽车使用手册用户操作图解驾驶车主车辆说明书pdf电子版下载.pdf

    在当今的数字时代,汽车制造商海马为了方便广大车主,特别提供了《海马2丘比特汽车使用手册》的电子版下载。这份手册不仅是车主熟悉新车的钥匙,更是他们在驾驶海马2丘比特汽车过程中可靠的伴侣。作为一本全面的专业...

    海马模拟器

    海马模拟器是一款高效、功能强大的安卓应用模拟器,它允许用户在个人电脑上运行安卓应用程序和游戏。这款模拟器以其出色的性能、兼容性和易用性而受到许多用户的青睐,尤其是对于那些希望在大屏幕上享受手游或者进行...

    海马骑士S7汽车使用手册用户操作图解驾驶车主车辆说明书pdf电子版下载.pdf

    1. 海马骑士S7是一款汽车,属于海马骑士系列乘用车,其产品执行标准为Q/HMAC102.100-151。 2. 使用手册的内容: - 详细介绍了海马骑士S7的结构特点、使用方法、保养规范等。 - 使用手册的目的是为了让用户合理...

    海马M3汽车使用手册用户操作说明书pdf电子版下载.pdf

    海马M3汽车使用手册用户操作说明书pdf电子版下载

    海马玩模拟器安装包

    海马玩模拟器安装包 移动开发工具 Android 海马玩模拟器安装包 移动开发工具 Android

    易语言源码易语言海马记数字源码.rar

    易语言源码易语言海马记数字源码.rar 易语言源码易语言海马记数字源码.rar 易语言源码易语言海马记数字源码.rar 易语言源码易语言海马记数字源码.rar 易语言源码易语言海马记数字源码.rar 易语言源码易语言海马...

    海马汽车:新能源汽车进军俄罗斯市场.pdf

    这一动向揭示了海马汽车在全球化战略上的重大进展,特别是在新能源汽车领域的布局。据报导,海马汽车与俄罗斯的福特姆公司签署了合作备忘录,旨在推动海马新能源汽车进入俄罗斯市场。福特姆公司在汽车电子产品制造...

    海马苹果助手 v4.4.8.zip

    海马苹果助手是一款专业好用的苹果应用管理软件。软件实现,不用越狱,也无需Apple ID就能火速下载海量应用、游戏,优质资源完全免费下载使用,具有界面清爽、操作流畅、下载飞速、资源海量等优势。海马苹果助手界面...

    海马M5 CD机的音效调整接线改AUX

    海马M5 CD机的音效调整接线改AUX是一项实用的技术改造,下面将详细介绍这个过程及其相关知识点。 首先,我们需要理解AUX接口的作用。AUX接口,全称是Auxiliary(辅助)输入接口,通常是一个3.5mm的立体声插孔,用于...

    海马体「预测地图」

    DeepMind 近日在《Nature Neuroscience》上发布最新研究,认为海马体能够通过预期的后续状态来展示每一个当前状态,从而传输对未来事件的细致总结。这种特殊形式的预测地图使大脑快速适应奖励不同的环境,而无需运行...

    海马玩mac安卓极速虚拟机

    "海马玩mac安卓极速虚拟机"是一款专为Mac用户设计的高效安卓模拟器,它提供了在苹果操作系统上运行Android应用程序的能力,极大地便利了开发者在没有物理安卓设备的情况下进行应用开发、测试和调试。这款虚拟机以其...

Global site tag (gtag.js) - Google Analytics