【发布时间】:2019-07-23 09:11:56
【问题描述】:
我有一个计时器类,用于捕获我的一个进程的解压缩时间和反序列化时间。我正在使用并行流来执行上述操作,并想知道我所有对象的总解压缩时间和反序列化时间
我正在调用 getVersionedRawDealNew(),它会为每个交易解压缩和反序列化。
转换时间比整个方法处理我的所有对象所花费的时间要长得多,这似乎是不正确的。如果以下转换时间的计算方式正确,您能告诉我吗?
ProcessTimer timer = new ProcessTimer();
List<VersionedRawDeal> versionedRawDeals = compressedVersionedRawDeals
.parallelStream()
.map(vrd -> getVersionedRawDealNew(vrd, timer))
.collect(Collectors.toList());
LOGGER.info("Time taken to process zipping : " + timer.getZipTime());
LOGGER.info("Time taken to process transformation :" + timer.getTransformTime());
//getVeronedRawDealNew 方法
private VersionedRawDeal getVersionedRawDealNew(CompressedVersionedRawDeal compressedVerDeal, ProcessTimer timer){
CompressedRawDeal compressedDeal = compressedVerDeal.rawDeal();
DealVersion dealVersion = compressedVerDeal.dealVersion();
long zipStartTime = System.currentTimeMillis();
final String dealXml = unzip(dealVersion, compressedDeal.getDealXmlBytes());
long zipTime = System.currentTimeMillis() - zipStartTime;
timer.addZipTime(zipTime);
long transformStartTime = System.currentTimeMillis();
final RawDeal rawDeal = RawDealTransformers.getRawDealTransformerFor(compressedDeal.getSourceSystem())
.transformDeal(compressedDeal.getSourceEvent(), dealXml);
long transformTime = System.currentTimeMillis() - transformStartTime;
timer.addTransformTime(transformTime);
return ImmutableVersionedRawDeal.builder().dealVersion(dealVersion).rawDeal(rawDeal).build();
}
//进程定时器
public class ProcessTimer {
private AtomicLong zipTime;
private AtomicLong transformTime;
public ProcessTimer(){
this.zipTime = new AtomicLong();
this.transformTime = new AtomicLong();
}
public void addZipTime(long time){
this.zipTime.addAndGet(time);
}
public void addTransformTime(long time){
this.transformTime.addAndGet(time);
}
public long getZipTime(){
return zipTime.get();
}
public long getTransformTime(){
return transformTime.get();
}
}
输出
我没有得到正确的时间计算,因为我有一个包含上述调用的计时器,即在父方法中,运行整个过程所需的时间小于我的转换时间。包含解压缩和转换时间的父方法的计时器应该大于我的转换时间,但事实并非如此。
【问题讨论】:
标签: java multithreading parallel-processing java-stream