草庐IT

并行机

全部标签

java - 并行执行测试时获取顺序日志

我们一直在使用testng和java来为我们的代码执行集成测试。我们为测试执行实现了一个监听器,如下所示:-publicclassTestExecutionListenerimplementsIInvokedMethodListener{@OverridepublicvoidbeforeInvocation(IInvokedMethodiInvokedMethod,ITestResultiTestResult){System.out.println("Testing:"+iInvokedMethod.getTestMethod().getMethodName());}@Override

java - 一个 Stream 是否可以顺序处理一部分流水线,然后并行处理?

我有以下代码无法按预期工作(跳过随机行,而不是第一行):Files.lines(path).skip(1).parallel().forEach(System.out::println)我感觉我误解了Streams的行为。问题是:我能否先将流视为顺序流(并使用“有状态的中间操作”),然后将其送入并行forEach? 最佳答案 整个管道要么是并行的,要么是顺序的。尝试使用forEachOrdered而不是forEach。在我的测试中,如果使用forEachOrdered它会跳过第一行(对于forEach它会跳过最后一行)。forEac

java - 是否可以将有序收集器与并行流一起使用?

当使用流计算笛卡尔积时,我可以并行生成它们,并按顺序使用它们,以下代码演示了这一点:intmin=0;intmax=9;Suppliersupplier=()->IntStream.rangeClosed(min,max).parallel();supplier.get().flatMap(a->supplier.get().map(b->a*b)).forEachOrdered(System.out::println);这将完美地按顺序打印所有内容,现在考虑以下代码,我想将它添加到列表中,同时保留顺序。intmin=0;intmax=9;Suppliersupplier=()->In

java - 如何限制 Stream 顺序运行,并防止它并行运行?

我有一个方法可以返回从自定义拆分器生成的流;分离器不安全。由于spliterator不安全,并且它保持状态,我想防止它并行运行。有没有办法防止返回的流并行运行?我没能找到执行此操作的任何文档或示例。我确实在BaseStream类上找到了一个sequential()方法,但这似乎并没有阻止用户调用parallel()来得到一个并行流。 最佳答案 并行流调用拆分器的trySplit()方法将您的任务拆分为多个部分。这是absolutelylegit从trySplit()返回null表示“我拒绝拆分”。在这种情况下,即使显式调用了.par

java - 难道不能保证从列表派生的并行流总是表现得像它的顺序对应物一样,提供相同的、可预测的输出吗?

以下代码打印true100次:for(inti=0;i当然,100次并不是保证。但是,即使此处使用的身份不符合doc的要求“...对于所有u,combiner.apply(identity,u)等于u”,这似乎不是吗?,我们仍然可以说从列表或任何其他固有有序结构派生的并行流将表现得像reduce()中的顺序流一样返回相同的输出? 最佳答案 JavadocfortheStream.reducefunctionwithanidentityargument说:Theidentityvaluemustbeanidentityfortheac

java - 并行处理何时克服顺序处理?

//parallelprocessingintprocessors=Runtime.getRuntime().availableProcessors();ExecutorServiceexecutorService=Executors.newFixedThreadPool(threads);finalListalbumIds2=newArrayList();longstart2=System.nanoTime();for(finalHColumncolumn:result.get().getColumns()){Runnableworker=newRunnable(){@Overrid

java - 与 TestNG 并行的参数化 Selenium 测试

首先,对不起我的英语,它不是那么完美:)所以我面临以下问题:我正在尝试使用SeleniumGrid和TestNg在不同的浏览器中运行并行测试,并在@BeforeTest方法中传递参数。我的问题是,当每个测试都被初始化时,它们似乎会使用最后一个测试的参数。所以在这个例子中,当我运行测试时,它会打开两个Chrome,而不是一个Firefox和一个Chrome。(browser.getDriver()方法返回一个RemoteWebDriver)TestNG.xml:AbstractTest类:publicclassSeleniumTest{privatestaticListwebDriver

Java 并行流 : there's a way to navigate a binary tree?

我正在努力寻找一种适当的方法来从这个流中获得加速:StreamSupport.stream(newBinaryTreeSpliterator(root),true).parallel().map(node->processor.onerousFunction(node.getValue())).mapToInt(i->i.intValue()).sum()onerousFunction()只是一个使线程工作一段时间并返回节点的int值的函数。无论我使用多少cpu,执行时间始终保持不变。我认为问题出在我写的Spliterator中:publicclassBinaryTreeSpliter

java - 如何在 Java 中对返回 boolean 值的两个并行线程执行短路评估?

我正在寻找逻辑上等同于以下问题的指导:publicbooleanparallelOR(){ExecutorServiceexecutor=Executors.newFixedThreadPool(2);FuturetaskA=executor.submit(newSlowTaskA());FuturetaskB=executor.submit(newSlowTaskB());returntaskA.get()||taskB.get();//ThisisnotwhatIwant//Exceptionhandlingomittedforclarity}上面的构造给出了正确的结果但是总是等待

java - 并行执行竞争计算并丢弃除第一个完成的计算之外的所有计算

我编写了一个根据随机性生成迷宫的函数。大多数时候,这个函数非常快。但是偶尔,由于随机数运气不好,需要几秒钟。我想并行多次启动这个函数,让最快的函数“获胜”。Scala标准库(或Java标准库)是否为这项工作提供了合适的工具? 最佳答案 你可以使用Future:importscala.concurrent.Futureimportscala.concurrent.ExecutionContext.Implicits.globalvalfutures=for(_如果你想阻止(我想你会这样做),你可以使用Await.result:impo