草庐IT

并行机

全部标签

java - 如何在 Gradle 中为单个测试类并行执行 JUnit 测试

我们有很多使用Spring的集成测试。我们不希望为每个测试创建单独的JVM进程(maxParallelForks选项)或者只在多模块项目中运行并行构建(--parallel)。我们希望单个测试类并行执行测试,就像在Maven中一样http://maven.apache.org/surefire/maven-surefire-plugin/examples/fork-options-and-parallel-execution.html和并行选项Theimportantthingtorememberwiththeparalleloptionis:theconcurrencyhappens

Java - 连续并行流之间的缓存一致性?

考虑以下代码(乍一看并不完全是这样)。staticclassNumberContainer{intvalue=0;voidincrement(){value++;}intgetValue(){returnvalue;}}publicstaticvoidmain(String[]args){Listlist=newArrayList();intnumElements=100000;for(inti=0;i{if(container.getValue()!=numIterations){System.out.println("Problem!!!");}});}我的问题是:为了绝对确定“问

java - Java ForkJoinPool 中的并行度是多少?

当我遇到ForkJoinPool的这个构造函数时,我正在研究关于Fork/Join框架的oracle文档:ForkJoinPool(intparallelism)。文档说这是并行级别,默认情况下等于可用处理器的数量。谁能告诉我如何使用它来提高程序的速度和效率? 最佳答案 本质上,并行设置告诉ForkJoinPool要使用多少工作线程。默认设置通常是最佳的,但是假设您有一个独立于ForkJoinPool的工作线程,那么您可能会发现将工作线程数设置为处理器数-1比使用所有的处理器。一般来说,提高特定程序的速度和效率的唯一方法是使用不同的

java - JUnit 和 Surefire 并行测试 - ForkCount 和 ThreadCount

我正在使用Surefire插件在Selenium网格上运行Selenium测试来执行测试。就我的测试分割而言,我有几个类(class),其中一些有1个测试,一些有不止一个测试。所以在我的网格上我有30个chromeweb驱动程序,我想在所有类中并行执行所有测试。我已经阅读了如何使用我设置为的parallel参数来执行此操作:maven-surefire-plugin2.17${testSuite}allfalsefalse20${browser_type}然而,这似乎并不能填满我可用的所有Chrome网络驱动程序。如果我然后使用forkCount,例如:20true然后当测试执行第一次

java - 并行流上的迭代器()保证遇到顺序?

Stream.of(a,b,c).parallel().map(Object::toString).iterator();返回的迭代器是否保证按顺序提供值a、b、c?我知道toArray()和collect()保证集合中的值以正确的顺序排列。另外,我不是在问如何从迭代器创建流。 最佳答案 这是规范中的疏忽。如果一个流有一个定义的遇到顺序,其目的是它的迭代器按遇到顺序生成元素。如果流没有定义的遇到顺序,迭代器当然会按一些顺序生成元素,但不会定义该顺序。我已经提交了错误JDK-8194952跟踪规范的更改。看起来其他人已经爬过足够多的实

java - 为什么我可以将并行流收集到任意大的数组而不是顺序流?

来自回答thisquestion,我遇到了一个奇怪的功能。以下代码按我假设的方式工作(现有数组中的前两个值将被覆盖):Integer[]newArray=Stream.of(7,8).parallel().toArray(i->newInteger[]{1,2,3,4,5,6});System.out.println(Arrays.toString(newArray));输出:[7,8,3,4,5,6]但是,尝试使用顺序流进行此操作会抛出IllegalStateException:Integer[]newArray=Stream.of(7,8).toArray(i->newIntege

java - Reader#lines() 由于其拆分器中不可配置的批量大小策略而严重并行化

当流源是Reader时,我无法实现流处理的良好并行化。在四核CPU上运行下面的代码,我观察到一开始使用了3个内核,然后突然下降到只有两个,然后是一个内核。总体CPU利用率徘徊在50%左右。请注意示例的以下特征:只有6,000行;每行大约需要20毫秒来处理;整个过程大约需要一分钟。这意味着所有压力都在CPU上,I/O最小。该示例是自动并行化的坐骑。importstaticjava.util.concurrent.TimeUnit.NANOSECONDS;importstaticjava.util.concurrent.TimeUnit.SECONDS;...classimportseli

java - Java中无限流的并行处理

为什么下面的代码不打印任何输出,而如果我们删除并行,它打印0、1?IntStream.iterate(0,i->(i+1)%2).parallel().distinct().limit(10).forEach(System.out::println);虽然我知道理想情况下limit应该放在distinct之前,但我的问题更多地与添加并行处理造成的差异有关。 最佳答案 真正的原因是orderedparallel.distinct()是全屏障操作described在文档中:Preservingstabilityfordistinct()

Java 8 Stream - 并行执行 - 不同的结果 - 为什么?

假设我有一个Listints=newArrayList();我想为其添加值并使用forEach()比较并行执行的结果和Collectors.toList().首先,我向这个列表中添加一些来自顺序IntStream和forEach的值:IntStream.range(0,10).boxed().forEach(ints::add);我得到了正确的结果:ints==>[0,1,2,3,4,5,6,7,8,9]现在我.clear()列表并并行做同样的事情:IntStream.range(0,10).parallel().boxed().forEach(ints::add);现在由于多线程我得

java - 与 Junit 并行运行测试

这个问题在这里已经有了答案:RunningjunittestsinparallelinaMavenbuild?(10个答案)关闭7年前。我想在多个类中同时运行每个用@Test注释的方法。对于某些情况,我想对此进行限制,并说每次只能运行100个。我希望带有@BeforeClass注释的方法在类中的任何测试运行之前运行一次,并且我希望@AfterClass注释在所有测试之后运行一次类(class)运行。我希望System.out、System.err和Exceptions被适本地缓冲/捕获而不是写出,这样它们就不会交错,我可以阅读最终输出并了解发生了什么。这存在吗?我有大量独立的测试用例,