草庐IT

并行机

全部标签

java - 并行部署的 web 应用程序的所有版本的缓存都已关闭

我在版本为deployedinparallel的网络应用程序中使用ehcache在Tomcat实例上。这是在不停止应用程序的情况下部署新版本的便捷方法。然而,我对这种继续进行的方式有一个问题:即使我给缓存和磁盘存储不同的名称,根据webapp的版本,所有缓存在停止时停止一个实例。我的配置是:${project.version}和${buildNumber}在构建过程中被maven替换。有人知道如何避免这种不良行为吗?我正在使用ehcache-core-2.4.3和hibernate-ehcache-4.3.8。 最佳答案 net.s

java - 即时向 Java 8 并行流添加元素

目标是在Java8流的帮助下处理连续的元素流。因此,在处理该流时,将元素添加到并行流的数据源。JavadocofStreams在“非干扰”部分描述了以下属性:Formostdatasources,preventinginterferencemeansensuringthatthedatasourceisnotmodifiedatallduringtheexecutionofthestreampipeline.Thenotableexceptiontothisarestreamswhosesourcesareconcurrentcollections,whicharespecifical

java - 如何并行处理文件的行?

我想读取一个大文件,处理每一行并将结果插入数据库。我的目标是并行处理线条,因为每个过程都是一项长时间运行的任务。因此我希望一个线程继续读取,多个线程继续处理,一个线程继续插入block到db。我把它分解如下:1)按顺序逐行读取文件(简单)2)将每一行发送到线程池(3个线程),因为处理是长时间运行的任务。在线程池繁忙时阻止进一步的行读取。3)将每个处理过的行从每个theadpool写入StringBuffer4)监控缓冲区大小,并将结果以block的形式写入数据库(例如,每1000个条目)ExecutorServiceexecutor=Executors.newFixedThreadPo

java - ForkJoinPool 并行度=1 死锁

我正在使用jsr166yForkJoinPool在线程之间分配计算任务。但我显然一定做错了什么。如果我创建并行度>1的ForkJoinPool(默认为Runtime.availableProcessors();我一直在使用2-8个线程),我的任务似乎可以完美运行。但是,如果我创建并行度=1的ForkJoinPool,我会在不可预测的迭代次数后看到死锁。是的-设置parallelism=1是一种奇怪的做法。在这种情况下,随着线程数的增加,我正在分析并行算法,我想将并行版本与单线程运行与基线串行实现进行比较,以便准确确定并行实现的开销.下面是一个简单示例,说明了我遇到的问题。“任务”是对固

java - Gradle 禁用所有增量编译和并行构建

在一小组sbt项目中,我们需要一个protobuf/grpc编译,因为只有Gradle对此有正常支持,我们只用它来完成与protobuf相关的任务。有时它会随机地编译完全相同的东西失败并在重试时成功,我们确定这是因为增量Java编译。我想禁用各种孵化功能和增量编译,我希望这个东西是确定性的。为此我尝试过compileJava{//enablecompilationinaseparatedaemonprocessoptions.fork=false//enableincrementalcompilationoptions.incremental=false}但是Gradle仍然会给出这样

java - 如何并行化列表的映射?

这是我遇到的问题:我有一些对象的大序列(List),想对列表的所有元素执行一些操作并获得一个新序列(List)。喜欢:Listlist=newArrayList();for(SomeClasssc:originalList)list.add(someOperation(sc));自运营someOperation没有任何副作用,而且列表很大,我希望这个映射操作并行化。在Java中最好的方法是什么? 最佳答案 一个可能的实现可以利用Executor框架(包括示例)。 关于java-如何并行化

java - ScheduledExecutorService 多线程并行

我有兴趣使用ScheduledExecutorService在任务尚未完成时为任务生成多个线程。例如,我需要每0.5秒处理一个文件。第一个任务开始处理文件,如果第一个线程未完成,则在0.5秒后生成第二个线程并开始处理第二个文件,依此类推。这可以通过这样的方式完成:ScheduledExecutorServiceexecutor=Executors.newScheduledThreadPool(4)while(!executor.isShutdown()){executor.execute(task);try{Thread.sleep(500);}catch(InterruptedExc

java - Stream.forEach() 是否总是并行工作?

在AggregatingwithStreams,BrianGoetz比较了使用Stream.collect()填充集合和使用Stream.forEach()执行相同操作,以及以下两个片段:SetuniqueStrings=strings.stream().collect(HashSet::new,HashSet::add,HashSet::addAll);还有,Setset=newHashSet();strings.stream().forEach(s->set.add(s));然后他解释道:Thekeydifferenceisthat,withtheforEach()version,

CPU-GPU异构并行化APSP算法

一、Floyd-Warshall算法介绍Floyd-Warshall算法(英语:Floyd-Warshallalgorithm),中文亦称弗洛伊德算法或佛洛依德算法,是解决任意两点间的最短路径的一种算法,可以正确处理有向图或负权(但不可存在负权回路)的最短路径问题,同时也被用于计算有向图的闭包传递。原理其本质为动态规划,给定有向图图G=(V,E)G=(V,E)G=(V,E),其中V(vertices)V(vertices)V(vertices)为顶点数,E(edges)E(edges)E(edges)为边数,并给出初始权重矩阵w[i][j]w[i][j]w[i][j],表示顶点i→ji\rig

java - 为什么 parallelStream 不使用整个可用的并行性?

我创建了一个并行度为25的自定义ForkJoinPool。customForkJoinPool=newForkJoinPool(25);我有一个包含700个文件名的列表,我使用这样的代码从S3并行下载文件并将它们转换为Java对象:customForkJoinPool.submit(()->{returnfileNames.parallelStream().map((fileName)->{Loggerlog=Logger.getLogger("ForkJoinTest");longstartTime=System.currentTimeMillis();log.info("Start