当Java提供并发编程的功能时,使用Clojure(而不是Java)的主要优势是什么?
如果我为我的编译器启用OpenMP,是否可以并行执行任何STL算法/容器操作,如std :: fill,std :: transform?我目前正在与MSVC 2008合作.或者也许有其他方法使它并发?
谢谢.
我的问题是,Java中是否存在用于管理和并发运行具有逻辑依赖性的任务的框架.
我的任务如下:我有很多独立的任务(比方说A,B,C,D ......),它们是作为命令实现的(比如命令模式).我想有一种执行器,它将接受所有这些任务并以并行方式执行它们.这些任务可以相互依赖(例如,我无法运行C,在运行A之前),同步或异步.
我还想结合使用自定义启发式方法来影响调度程序的执行,例如,如果任务A和B是CPU密集型的,而C是比较高的内存消耗,那么并行运行A和C是有意义的,而不是运行A和B.
在我自己开始构建这些东西之前(我正在考虑基于java.util.concurrent + annotation的约束/规则),我想知道,如果有人能指出我可以满足我需求的项目.非常感谢提前
我在许多参考文献中发现它提到volatile在C/C++中很弱并且可能在多处理器的并发环境中引起问题,但它(volatile)可以用作C#/ Java中差异CPU之间的通信机制.看起来这个关键字在C#/ Java中比在C/C++中更严格,但它们之间的差异/影响是什么?
这是volatileC/C++ 的参考.
为什么volatile在多线程C或C++编程中不被认为有用?
从我在锁定免费编程上收集到的内容来看,这是非常难以做到的......我同意.只是想一些问题会让我头疼.但我想知道的是,为什么没有广泛使用高级包装器(例如无锁队列和类似的东西)?例如,boost没有锁定免费库,但据我所知,有人建议使用.我的意思是我猜有很多应用程序,你不能避免关键部分是负载的重要部分.那么原因是什么?是吗...
所以我的问题是:为什么使用无锁编程的高级抽象不是很受欢迎,而同时"常规"多线程编程是"在"?
编辑:boost有一个无锁lib :)
我可以像这样按值对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
这可能是一个重复的问题,但我在一本关于并发的书中找到了这部分代码.这据说是线程安全的:
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
以下是否正确?
(当涉及多个生产者(即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
我今天在slashdot上阅读了这个故事,他们宣布了微软新的并行编程语言.
这种新的编程语言是关于什么的?它说并行编程.但它是否会成为MPI,PVM,OpenMP和类似并行库/框架的替代/替代品?
有什么想法吗?
我发现写锁定ReentrantReadWriteLock提供了一种isHeldByCurrentThread()方法来检查调用线程是否持有该锁.
但是没有相应isHeldByCurrentThread()的读锁方法.为什么不?
java concurrency multithreading java.util.concurrent concurrent-programming