Questions tagged «concurrency»

在计算机科学中,并发是系统的属性,其中可以在重叠的时间段内执行多个计算。这些计算可以在同一芯片的多个内核上执行,也可以在同一处理器上抢占时间共享线程,或者在物理上分开的处理器上执行。

14
Java并发性:倒数锁存器与循环障碍
我在阅读java.util.concurrent API时发现 CountDownLatch:同步帮助,它允许一个或多个线程等待,直到在其他线程中执行的一组操作完成。 CyclicBarrier:同步帮助,它允许一组线程互相等待以到达一个公共的障碍点。 在我看来,两者似乎是平等的,但我相信还有更多的东西。 例如,在中CoundownLatch, the countdown value could not be reset, that can happen in the case of CyclicBarrier。 两者之间还有其他区别吗?有人想 在use cases哪里重置倒计时的值?


5
迭代ConcurrentHashMap值线程安全吗?
在javadoc中,ConcurrentHashMap如下: 检索操作(包括get)通常不会阻塞,因此可能与更新操作(包括put和remove)重叠。检索反映了自发生以来最新完成的更新操作的结果。对于诸如putAll和clear的聚合操作,并发检索可能仅反映某些条目的插入或删除。同样,迭代器和枚举返回的元素反映了在创建迭代器/枚举时或此后某个时刻哈希表的状态。他们不抛出ConcurrentModificationException。但是,迭代器被设计为一次只能由一个线程使用。 这是什么意思?如果我尝试同时使用两个线程迭代地图,会发生什么情况?如果在迭代过程中从地图上放置或删除值会怎样?

3
HttpClient可以安全同时使用吗?
在所有示例中,我都能找到的用法HttpClient,它用于一次关机。但是,如果我的客户持续存在这种情况,可以同时发出多个请求怎么办?基本上,client.PostAsync针对的同一实例立即调用2个线程是否安全HttpClient? 我不是在这里真正寻找实验结果。作为一个工作示例,可能只是simply幸(还有一个持久的persistent幸),而失败的示例可能是配置错误。理想情况下,我正在寻找有关HttpClient中并发处理问题的权威答案。

6
iPhone-大中央调度主线程
我一直在应用程序中成功使用大型中央调度程序,但是我想知道使用这样的东西的真正优势是什么: dispatch_async(dispatch_get_main_queue(), ^{ ... do stuff 甚至 dispatch_sync(dispatch_get_main_queue(), ^{ ... do stuff 我的意思是,在两种情况下,您都将触发要在主线程上执行的块,确切地说是应用程序的运行位置,这无助于减少负载。在第一种情况下,您无法控制该块何时运行。我已经看到了在您触发它们后半秒钟执行块的情况。第二种情况,类似于 [self doStuff]; 对? 我想知道你们的想法。

5
如果非同步静态方法不修改静态类变量,它们是否安全?
我在想,如果您有一个静态方法不同步,但并没有修改任何静态变量是线程安全的?如果该方法在其中创建局部变量该怎么办?例如,以下代码是线程安全的吗? public static String[] makeStringArray( String a, String b ){ return new String[]{ a, b }; } 因此,如果我有两个线程连续并同时调用此方法,一个带狗(例如“大丹狗”和“斗牛犬”),另一个带猫(例如“波斯”和“暹罗”)的猫,我将得到猫和狗在同一阵列中?还是猫和狗永远不会同时处于该方法的同一调用中?

4
GreenletVS。线程数
我是gevents和greenlets的新手。我找到了一些有关如何使用它们的很好的文档,但是没有一个文档为我提供有关如何以及何时使用greenlets的理由! 他们真正擅长的是什么? 是否在代理服务器中使用它们是一个好主意吗? 为什么不线程? 我不确定的是,如果它们基本上是例程,它们如何为我们提供并发性。

10
活锁的好例子?
我知道什么是活锁,但是我想知道是否有人拥有基于代码的良好示例?通过基于代码的方式意思不是指“两个人试图在走廊里互相越过”。如果我再读一遍,我将失去午餐。

12
从多个线程从java.util.HashMap获取值是否安全(无修改)?
在某些情况下,将构造一个映射,并且一旦对其进行初始化,就永远不会再对其进行修改。但是,它将从多个线程访问(仅通过get(key))。java.util.HashMap以这种方式使用安全吗? (当前,我很乐意使用java.util.concurrent.ConcurrentHashMap,并没有提高性能的需要,但是只是HashMap想知道一个简单的方法是否足够。因此,这个问题不是 “我应该使用哪个?”,也不是一个性能问题。相反,问题是“安全吗?”)

4
Java中不同类型的线程安全集
在Java中似乎有很多不同的实现和方法来生成线程安全的Set。一些例子包括 1)CopyOnWriteArraySet 2)Collections.synchronizedSet(设置集) 3)ConcurrentSkipListSet 4)Collections.newSetFromMap(new ConcurrentHashMap()) 5)以类似于(4)的方式生成的其他集合 这些示例来自Java 6中的并发模式:并发集实现。 有人可以简单解释一下这些示例与其他示例的区别,优点和缺点吗?我在理解和保持Java Std Docs的所有内容方面遇到麻烦。
135 java  concurrency  set 


4
哪种并行排序算法具有最佳的平均案例性能?
在串行情况下,排序需要O(n log n)。如果我们有O(n)个处理器,我们希望线性加速。存在O(log n)个并行算法,但是它们具有很高的常数。它们也不适用于没有O(n)处理器的商品硬件。对于p个处理器,合理的算法应花费O(n / p log n)时间。 在串行情况下,快速排序平均具有最佳的运行时复杂性。并行快速排序算法很容易实现(请参阅此处和此处)。但是,由于最初的步骤是将整个集合分区在单个内核上,因此执行效果不佳。我已经找到了许多并行排序算法的信息,但到目前为止,我还没有发现任何指向明确赢家的信息。 我希望以运行8到32个内核的JVM语言对100万到1亿个元素的列表进行排序。

6
我应该在Java中使用哪个并发队列实现?
从JavaDocs: 一的ConcurrentLinkedQueue是当许多线程共享访问一个共同的集合一个合适的选择。此队列不允许空元素。 ArrayBlockingQueue是一个经典的“有界缓冲区”,其中固定大小的数组保存由生产者插入并由消费者提取的元素。此类支持可选的公平性策略,用于订购正在等待的生产者和使用者线程 与基于阵列的队列相比,LinkedBlockingQueue通常具有更高的吞吐量,但是在大多数并发应用程序中,可预测的性能较差。 我有两种情况,一种情况要求队列支持一个使用者使用许多生产者(使用它的线程),而另一种情况则相反。 我不知道要使用哪种实现。有人可以解释这些区别是什么吗? 另外,什么是“可选的公平政策” ArrayBlockingQueue?

8
.NET-字典锁定与ConcurrentDictionary
我找不到有关ConcurrentDictionary类型的足够信息,所以我想在这里问一下。 当前,我使用a Dictionary来保存由多个线程(从线程池,因此没有确切数量的线程)不断访问的所有用户,并且它具有同步访问。 我最近发现,.NET 4.0中有一组线程安全的集合,这看起来非常令人愉快。我想知道,什么是“更有效,更易于管理”的选项,因为我可以选择普通Dictionary访问与同步访问,或者选择已经ConcurrentDictionary是线程安全的访问。 对.NET 4.0的引用 ConcurrentDictionary

5
何时在多线程中使用volatile?
如果有两个线程访问全局变量,那么许多教程都说要使变量可变,以防止编译器将变量缓存在寄存器中,从而导致无法正确更新。但是,两个都访问共享变量的线程需要通过互斥锁进行保护,不是吗?但是在那种情况下,在线程锁定和释放互斥锁之间,代码处于关键部分,其中只有一个线程可以访问该变量,在这种情况下,变量不需要是可变的? 因此,多线程程序中volatile的用途/目的是什么?

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.