标签: concurrent-programming

为什么Clojure而不是Java用于并发编程

当Java提供并发编程的功能时,使用Clojure(而不是Java)的主要优势是什么?

java clojure concurrent-programming

16
推荐指数
5
解决办法
2584
查看次数

STL算法和并发编程

如果我为我的编译器启用OpenMP,是否可以并行执行任何STL算法/容器操作,如std :: fill,std :: transform?我目前正在与MSVC 2008合作.或者也许有其他方法使它并发?

谢谢.

c++ parallel-processing stl concurrent-programming

16
推荐指数
1
解决办法
6748
查看次数

用于管理任务的Java Framework

我的问题是,Java中是否存在用于管理和并发运行具有逻辑依赖性的任务的框架.

我的任务如下:我有很多独立的任务(比方说A,B,C,D ......),它们是作为命令实现的(比如命令模式).我想有一种执行器,它将接受所有这些任务并以并行方式执行它们.这些任务可以相互依赖(例如,我无法运行C,在运行A之前),同步或异步.

我还想结合使用自定义启发式方法来影响调度程序的执行,例如,如果任务A和B是CPU密集型的,而C是比较高的内存消耗,那么并行运行A和C是有意义的,而不是运行A和B.

在我自己开始构建这些东西之前(我正在考虑基于java.util.concurrent + annotation的约束/规则),我想知道,如果有人能指出我可以满足我需求的项目.非常感谢提前

java multithreading frameworks concurrent-programming

14
推荐指数
1
解决办法
4896
查看次数

C/C++和C#/ Java之间使用volatile的区别是什么?

我在许多参考文献中发现它提到volatile在C/C++中很弱并且可能在多处理器的并发环境中引起问题,但它(volatile)可以用作C#/ Java中差异CPU之间的通信机制.看起来这个关键字在C#/ Java中比在C/C++中更严格,但它们之间的差异/影响是什么?

这是volatileC/C++ 的参考. 为什么volatile在多线程C或C++编程中不被认为有用?

c c# c++ java concurrent-programming

14
推荐指数
3
解决办法
5340
查看次数

使用无锁编程深层次的高级抽象不受欢迎的原因是什么?

从我在锁定免费编程上收集到的内容来看,这是非常难以做到的......我同意.只是想一些问题会让我头疼.但我想知道的是,为什么没有广泛使用高级包装器(例如无锁队列和类似的东西)?例如,boost没有锁定免费库,但据我所知,有人建议使用.我的意思是我猜有很多应用程序,你不能避免关键部分是负载的重要部分.那么原因是什么?是吗...

  1. 专利 - 我听说一些与无锁编程相关的东西已获得专利.
  2. 性能.
  3. 谷歌和微软都有像这样的内部库,但没有一个是公开的......
  4. 别的什么?

所以我的问题是:为什么使用无锁编程的高级抽象不是很受欢迎,而同时"常规"多线程编程是"在"?

编辑:boost有一个无锁lib :)

queue boost lock-free concurrent-programming

12
推荐指数
1
解决办法
1160
查看次数

按Value排序ConcurrentDictionary

我可以像这样按值对ConcurrentDictionary进行排序:

static ConcurrentDictionary<string, Proxy> Proxies = 
    new ConcurrentDictionary<string, Proxy>();

Proxies.OrderBy(p => p.Value.Speed);
Run Code Online (Sandbox Code Playgroud)

这很好,除了我想将新的重新排序的列表设置为字典,有效地排序字典本身而不是仅仅接收已排序项的结果列表.

我尝试做这样的事情,但没有运气 - 字典仍然无序后:

Proxies = new ConcurrentDictionary<string,Proxy>(
    Proxies.OrderBy(p => p.Value.Speed));
Run Code Online (Sandbox Code Playgroud)

似乎这样做对字典没有影响.我也尝试将OrderBy结果转换为一个新的var,认为它可能对委托产生影响但仍然没有运气.

如何重新订购此ConcurrentDictionary,然后强制字典成为OrderBy的重新排序结果?

c# parallel-processing concurrency concurrent-programming c#-4.0

12
推荐指数
1
解决办法
1万
查看次数

Java ConcurrentHashMap动作原子性

这可能是一个重复的问题,但我在一本关于并发的书中找到了这部分代码.这据说是线程安全的:

ConcurrentHashMap<String, Integer> counts = new ...;

private void countThing(String thing) {
    while (true) {
        Integer currentCount = counts.get(thing);
        if (currentCount == null) {
            if (counts.putIfAbsent(thing, 1) == null)
                break;
        } else if (counts.replace(thing, currentCount, currentCount + 1)) {
            break;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

从我的(并发初学者)的角度来看,线程t1和线程t2都可以读取currentCount = 1.然后两个线程都可以将地图的值更改为2.有人可以解释我代码是否正常?

java concurrency multithreading concurrenthashmap concurrent-programming

12
推荐指数
2
解决办法
323
查看次数

什么时候使用破坏者模式和当工作窃取本地存储?

以下是否正确?

  • 破坏者模式具有更好的并行性能和可扩展性,如果每个条目有多种方式(IO操作或注释)进行处理,因为可以使用多个消费者不争进行并行化.
  • 相反,工作窃取(即在本地存储条目和从其他线程窃取条目)具有更好的并行性能和可伸缩性,如果每个条目必须仅以单一方式处理,因为在干扰模式中将条目不相交地分配到多个线程会导致争用.

(当涉及多个生产者(即CAS操作)时,破坏者模式是否仍然比其他无锁多生产者多消费者队列(例如来自提升)快得多?)


我的情况详细:

处理条目可以产生几个新条目,这些条目也必须最终处理.性能具有最高优先级,以FIFO顺序处理的条目具有第二优先级.

在当前实现中,每个线程使用本地FIFO,在其中添加新条目.空闲线程从其他线程的本地FIFO中窃取工作.线程处理之间的依赖关系使用无锁,机械同情的哈希表(写入时的CAS,具有桶粒度)来解决.这导致相当低的争用,但FIFO顺序有时会被破坏.

使用干扰模式可以保证FIFO顺序.但是不会将条目分配到线程上导致更高的争用(例如,读取游标上的CAS),而不是工作窃取的本地FIFO(每个线程的吞吐量大致相同)?


我发现的参考文献

关于破坏者的标准技术论文(第5章+6)中的性能测试不包括不相交的工作分布.

https://groups.google.com/forum/?fromgroups=#!topic/lmax-disruptor/tt3wQthBYd0是我在disruptor +偷窃工作中发现的唯一参考.它声明如果存在任何共享状态,每个线程的队列会显着减慢,但不会详细说明或解释原因.我怀疑这句话适用于我的情况:

  • 使用无锁哈希表解析共享状态;
  • 必须在消费者之间不相交地分发条目;
  • 除了工作窃取之外,每个线程只在其本地队列中进行读写.

concurrency concurrent-programming disruptor-pattern work-stealing

11
推荐指数
1
解决办法
2267
查看次数

什么是这种新的Axum编程语言?

我今天在slashdot上阅读了这个故事,他们宣布了微软新的并行编程语言.

这种新的编程语言是关于什么的?它说并行编程.但它是否会成为MPI,PVM,OpenMP和类似并行库/框架的替代/替代品?

有什么想法吗?

.net programming-languages concurrent-programming axum

10
推荐指数
2
解决办法
1943
查看次数

为什么无法检查当前线程是否保持ReentrantReadWriteLock的读锁定?

我发现写锁定ReentrantReadWriteLock提供了一种isHeldByCurrentThread()方法来检查调用线程是否持有该锁.

但是没有相应isHeldByCurrentThread()的读锁方法.为什么不?

java concurrency multithreading java.util.concurrent concurrent-programming

9
推荐指数
1
解决办法
1670
查看次数