Tag: cyclicbarrier

可重置的倒计时补丁

我需要的东西直接等同于CountDownLatch ,但是可以重置(保持线程安全!)。 我不能使用经典的同步结构,因为它们在这种情况下根本不起作用(复杂的锁定问题)。 目前,我正在创建许多CountDownLatch对象,每个对象都替换前一个。 我相信这是在GC中的年轻一代(由于物体数量庞大)。 您可以看到使用下面的锁存器的代码(它是用于ns-3网络模拟器接口的java.net模拟的一部分)。 一些想法可能是尝试CyclicBarrier (JDK5 +)或Phaser (JDK7) 我可以测试代码并回到找到解决此问题的任何人,因为我是唯一可以将其插入正在运行的系统中以查看发生了什么的人:) /** * */ package kokunet; import java.io.IOException; import java.nio.channels.ClosedSelectorException; import java.util.HashMap; import java.util.Map; import java.util.concurrent.CountDownLatch; import java.util.concurrent.TimeUnit; import kokuks.IConnectionSocket; import kokuks.KKSAddress; import kokuks.KKSSocket; import kokuks.KKSSocketListener; /** * KSelector * @version 1.0 * @author Chris Dennett */ public class KSelector extends SelectorImpl { // True […]

什么是Java中最快的循环同步(ExecutorService与CyclicBarrier vs.X)?

哪个Java同步构造可能为具有固定数量线程的并发迭代处理场景提供最佳性能,如下所述? 在我自己试验了一段时间后(使用ExecutorService和CyclicBarrier)并对结果感到有些惊讶,我会感谢一些专家建议和一些新想法。 这里的现有问题似乎并不主要关注绩效,因此这个新问题。 提前致谢! 该应用程序的核心是一个简单的迭代数据处理算法,与Mac Pro上8个内核的计算负载并行,运行OS X 10.6和Java 1.6.0_07。 要处理的数据被分成8个块,每个块被送到Runnable,由固定数量的线程之一执行。 并行化算法是相当简单的,它在function上按预期工作,但它的性能还不是我认为的可能。 该应用程序似乎花了很多时间在系统调用同步,所以经过一些分析后,我想知道我是否选择了最合适的同步机制。 该算法的一个关键要求是它需要分阶段进行,因此线程需要在每个阶段结束时进行同步。 主线程准备工作(非常低的开销),将其传递给线程,让它们处理它,然后在完成所有线程后继续,重新安排工作(再次非常低的开销)并重复循环。 该机器专用于此任务,通过使用预分配项的每线程池来最小化垃圾收集,并且可以修复线程数(没有传入请求等,每个CPU核心只有一个线程)。 V1 – ExecutorService 我的第一个实现使用了一个带有8个工作线程的ExecutorService。 该程序创建8个任务来完成工作,然后让他们处理它,大致如下: // create one thread per CPU executorService = Executors.newFixedThreadPool( 8 ); … // now process data in cycles while( …) { // package data into 8 work items … // create one Callable task per […]