concurrency相关内容

Java 比较和交换语义和性能

Java 中比较和交换的语义是什么?即,AtomicInteger 的比较和交换方法是否只是保证不同线程之间对原子整数实例的特定内存位置的有序访问,还是保证对内存中所有位置的有序访问,即它就像一个 volatile(一个内存栅栏). 来自文档: weakCompareAndSet 以原子方式读取和有条件地写入变量,但不创建任何发生在排序之前,因此不提供对先前或后续读取和写入除目标对象之 ..
发布时间:2021-12-28 23:03:58 Java开发

为什么 ConcurrentBag<T>.Net (4.0) 这么慢?我做错了吗?

在我开始一个项目之前,我写了一个简单的测试来比较 ConcurrentBag from (System.Collections.Concurrent) 相对于locking & 的性能.列表.我非常惊讶 ConcurrentBag 比使用简单列表锁定慢 10 倍以上.据我所知,当读者和作者是同一个线程时, ConcurrentBag 效果最好.然而,我没想到它的性能会比传统锁差这么多. 我使 ..
发布时间:2021-12-28 23:03:49 C#/.NET

@GuardedBy 、 @ThreadSafe 、@NotThreadSafe

我看到 JCIP 一书中广泛使用了上述注释.我认为它真的很有用,因为即使没有适当的文档,它也说明了一些关于同步策略的内容.我还看到 Intellij Idea 使用了这些注释 他们现在实际上Java 语言本身的一部分? 解决方案 这些是不属于标准 JDK 的自定义注解.为了能够在您的代码中使用它们,您需要添加一个依赖项. 在 jcip.net 上,页面底部有一个指向图书馆及其来源的链 ..
发布时间:2021-12-28 23:03:43 Java开发

C++0x 内存模型和推测加载/存储

所以我正在阅读作为即将到来的 C++0x 标准一部分的内存模型.但是,我对允许编译器执行的操作的一些限制感到有些困惑,特别是关于推测加载和存储的限制. 首先,一些相关的东西: Hans Boehm 关于线程和 C++0x 中的内存模型的页面 Boehm,“线程不能作为库实现" Boehm 和 Adve,“C++ 并发内存模型的基础" 萨特,“棱镜:原则-基于 Micr ..
发布时间:2021-12-28 23:03:31 C/C++开发

并发下载 - Python

计划是这样的: 我下载一个网页,收集在 DOM 中解析的图像列表,然后下载这些图像.在此之后,我将遍历图像以评估哪个图像最适合代表网页. 问题是图片是一张一张下载的,这可能需要相当长的时间. 如果有人能为我指出有关该主题的某个方向,那就太好了. 非常感谢您的帮助. 解决方案 加速爬行基本上是 Eventlet 的主要内容用例.它非常快——我们有一个应用程序必须在几分 ..
发布时间:2021-12-28 23:03:25 前端开发

如何与 Rails 4 同时处理请求?

我正在尝试在 Rails 4 中同时处理多个请求,我可以使用 Rails 3 中的 config.threadsafe! 和 Puma 轻松完成这项工作. 说我有这个控制器 class ConcurrentController 我曾经可以使用 puma -t 2:16 -p 3000(最少 2 个线程)启动 puma,然后点击 index 然后show 并且仍然有 show 正确呈现. ..
发布时间:2021-12-28 23:03:16 其他开发

Java BlockingQueue take() vs poll()

在无限循环中使用队列中的值时 - 什么会更有效: 1) 在队列上阻塞,直到通过 take() 获得一个值 while (value = queue.take()) { doSomething(value);} 2) 休眠 n 毫秒并检查物品是否可用 while (true) {if ((value = queue.poll()) != null) { doSomething(value ..
发布时间:2021-12-28 23:03:08 Java开发

等待……通知低级同步的最佳选择是什么?

据我所知,wait() 和 notify() 已经被更好的并发机制所取代.那么,你会选择什么更好的替代方案,比如实现 同步队列? 他们究竟在什么意义上“更好"? 编辑:这是一道面试题(“实现同步队列").可接受的答案不能使用 BlockingQueue 或其他队列实现.但是,它可能会使用其他同步构造,例如 CountDownLatch.我没有详尽的允许和禁止课程列表 - 用你的头脑. ..
发布时间:2021-12-28 23:02:59 Java开发

python concurrent.futures.ProcessPoolExecutor:.submit() 与 .map() 的性能

我正在使用 concurrent.futures.ProcessPoolExecutor 从数字范围内查找数字的出现.目的是调查从并发中获得的加速性能.为了基准性能,我有一个控制 - 一个串行代码来执行所述任务(如下所示).我编写了 2 个并发代码,一个使用 concurrent.futures.ProcessPoolExecutor.submit() 另一个使用 concurrent.futur ..
发布时间:2021-12-28 23:02:38 Python

在汇编语言级别如何实现线程同步?

虽然我熟悉诸如互斥体和信号量之类的并发编程概念,但我从未理解它们是如何在汇编语言级别实现的. 我想象有一组内存“标志"说: 锁 A 由线程 1 持有 锁 B 由线程 3 持有 锁 C 不被任何线程持有 等 但是如何在线程之间同步访问这些标志?像这个天真的例子只会产生竞争条件: mov edx, [myThreadId]等待:cmp [锁定], 0等一下mov [锁], ..
发布时间:2021-12-28 23:02:29 其他开发

将多个参数传递给 concurrent.futures.Executor.map?

concurrent.futures.Executor.map 使用可变数量的迭代器,从中调用给定的函数.如果我有一个生成元组的生成器,我应该如何调用它? 以下不起作用,因为每个生成的元组都作为映射的不同参数给出: args = ((a, b) for (a, b) in c)对于 executor.map(f, *args) 中的结果:经过 如果没有生成器,映射所需的参数可能如下所示: ..
发布时间:2021-12-28 23:02:20 Python

Java 8 不安全:xxxFence() 指令

在 Java 8 中,三个内存屏障指令被添加到 Unsafe 类(source): /*** 确保在栅栏前不会重新排序负载* 在栅栏后装载或储存.*/无效负载栅栏();/*** 确保在栅栏前不会对商店重新排序* 在栅栏后装载或储存.*/void storeFence();/*** 确保在栅栏前不会重新排序负载或存储* 在栅栏后装载或储存.*/void fullFence(); 如果我们用以下方 ..
发布时间:2021-12-28 23:02:09 Java开发

我怎么知道这个 C# 方法是否是线程安全的?

我正在为 ASP.NET 缓存项删除事件创建回调函数. 文档说我应该在对象上调用方法或调用我知道将存在(将在范围内),例如静态方法,但它说我需要确保静态是线程安全的. 第 1 部分:我可以做哪些事情来使其非线程安全? 第 2 部分:这是否意味着如果我有 static int addOne(int someNumber){int foo = someNumber;返回 foo + ..
发布时间:2021-12-28 23:02:01 C#/.NET

高性能并发 MultiMap Java/Scala

我正在寻找一种高性能、并发的 MultiMap.我到处搜索,但我根本找不到使用与 ConcurrentHashMap 相同方法的解决方案(仅锁定哈希数组的一部分). 多图将经常被读取、添加和删除. 多映射键是一个字符串,它的值是任意的. 我需要 O(1) 来找到给定键的所有值,O(N) 可以删除,但 O(logN) 是首选. 删除给定键的最后一个值会从键中删除值的容器,以免 ..
发布时间:2021-12-28 23:01:52 Java开发

为什么我应该为高级应用程序选择 GCD 而不是 NSOperation 和块?

Apple 的 Grand Central Dispatch 参考资料说: "...如果您的应用程序需要在系统——例如,如果它需要操作文件描述符,Mach端口、信号或定时器.GCD 不限于系统级应用程序,但在将其用于更高级别的应用程序之前,您应该考虑 Cocoa 中是否提供了类似的功能(通过NSOperation 和块对象)会更容易使用或更多适合您的需求.". http://devel ..

在使用 ConcurrentMap 的 putIfAbsent 之前,您是否应该检查地图是否包含密钥

我一直在将 Java 的 ConcurrentMap 用于可从多个线程使用的地图.putIfAbsent 是一种很好的方法,并且比使用标准映射操作更容易读/写.我有一些看起来像这样的代码: ConcurrentMap>map = new ConcurrentHashMap>();//...map.putIfAbsent(name, new HashSet());map.get(name).add ..
发布时间:2021-12-28 23:01:26 Java开发

是“Java 并发实践"吗?仍然有效?

Java 并发实践是否仍然有效?我想知道书中描述的想法、概念和实现是否仍然符合最新的Java版本. 我问是因为最新版本是在 2006 年完成的. 解决方案 是的,它在我心中仍然有效.这方面从6到7变化不大.fork-join是一个新特性,非常适合分治型问题.但是书中现有的所有东西,例如同步,易失性,servlet,仍然非常有效. ..
发布时间:2021-12-28 23:01:12 Java开发

在 Erlang 中获取衍生函数的结果

我目前的目标是编写 Erlang 代码来计算 N 个元素的列表,其中每个元素都是它的“索引"的阶乘(因此,对于 N = 10,我想得到 [1!, 2!,3!, ..., 10!]).更重要的是,我希望每个元素都在一个单独的过程中进行计算(我知道它的效率很低,但我希望我可以实现它,并在以后将其效率与其他方法进行比较). 在我的代码中,我想使用一个函数作为给定 N 的“循环",对于 N、N-1、 ..

如何将非静态数据发送到 Rust 中的线程,在本例中是否需要它?

我正在尝试使用 Rust 中的一些堆数据启动一个新线程,但由于需要数据具有 'static 生命周期,我收到了一堆错误.我已经把我的程序倒退了,但遇到了问题. 使用 std::sync::Arc;使用 std::thread;结构线程数据{vector_of_strings: Vec,术语:Vec,商:使用,}fn perform_search(slice: &[St ..
发布时间:2021-12-28 23:00:53 其他开发