问题标签 [concurrent-programming]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - STL 算法和并发编程
如果我为编译器启用 OpenMP,是否可以并行执行任何 STL 算法/容器操作,例如std::fill、std::transform ?我目前正在使用 MSVC 2008。或者也许还有其他方法可以使其并发?
谢谢。
c#-4.0 - 如何将 IObservable/IObserver 与 ConcurrentQueue 或 ConcurrentStack 一起使用
我意识到,当我尝试使用多个线程处理并发队列中的项目而多个线程可以将项目放入其中时,理想的解决方案是将 Reactive Extensions 与 Concurrent 数据结构一起使用。
我原来的问题是:
在使用 ConcurrentQueue 时,尝试在并行循环时出队
所以我很好奇是否有任何方法可以让 LINQ(或 PLINQ)查询随着项目的放入而不断出队。
我试图让它以这样一种方式工作,即我可以让 n 个生产者推入队列并处理有限数量的线程,这样我就不会使数据库过载。
如果我可以使用 Rx 框架,那么我希望我可以启动它,如果在 100 毫秒内放入 100 个项目,那么作为 PLINQ 查询一部分的 20 个线程将通过队列进行处理。
我正在尝试使用三种技术:
- Rx 框架(反应式 LINQ)
- PLING
- System.Collections.Concurrent 结构
guid - 在分布式并发环境中生成唯一序列号时的权衡是什么?
我很好奇在分布式和并发环境中生成唯一序列号的约束和权衡。
想象一下:我有一个系统,它所做的只是在你每次询问时返回一个唯一的序列号。这是此类系统的理想规范(约束):
- 在高负荷下保持站立。
- 允许尽可能多的并发连接。
- 分布式:将负载分散到多台机器上。
- 性能:尽可能快地运行并具有尽可能多的吞吐量。
- 正确性:生成的数字必须:
- 不重复。
- 每个请求都是唯一的(如果任何两个请求同时发生,则必须有办法打破关系)。
- 以(增加)顺序。
- 请求之间没有间隙:1,2,3,4...(实际上是总数 # 个请求的计数器)
- 容错:如果一台或多台或所有机器宕机,它可以恢复到失败前的状态。
显然,这是一个理想化的规范,并非所有约束都可以完全满足。见CAP 定理。但是,我很想听听您对各种放宽约束的分析。我们将留下什么类型的问题以及我们将使用什么算法来解决剩余的问题。例如,如果我们摆脱了计数器约束,那么问题就变得容易多了:由于允许有间隙,我们可以对数值范围进行分区并将它们映射到不同的机器上。
欢迎任何参考资料(论文、书籍、代码)。我还想保留一份现有软件(开源与否)的列表。
软件:
- Snowflake:一种用于大规模生成唯一 ID 号的网络服务,并提供一些简单的保证。
- keyspace:一个可公开访问的唯一 128 位 ID 生成器,其 ID 可用于任何目的
- RFC-4122 实现存在于多种语言中。RFC 规范可能是一个非常好的基础,因为它避免了任何系统间协调的需要,UUID 是 128 位的,并且当使用来自实现特定版本规范的软件的 ID 时,它们包含一个时间码部分,排序可能等。
concurrent-programming - 无论如何我可以让电脑摄像头在 Windows 上同时访问?
默认情况下,如果相机已在使用中,后续对相机的引用将失败。
但是是否可以将后续引用设置为只读,但仍然可以访问相机?
java - Java:引用转义
请阅读以下代码是“不安全构造”的示例,因为它允许此引用转义。我不太明白“这个”是如何逃脱的。我对java世界很陌生。任何人都可以帮助我理解这一点。
c# - .Net 4.0 并行编程 - 如何将数据写入并发集合?
我有一个网格,定义为:List<List<Cell>>
,其中“Cell”是我的自定义类。我的程序有几个线程可以访问网格上的各种坐标,并更改“Cell”类中的数据。但我只希望一个线程一次将数据写入“Cell”对象。我认为使用 ConcurrentBag 等并发集合会有所帮助,但似乎所有并发集合都只有添加项目或从集合中删除项目的方法。似乎没有一种线程安全的方式来更改此类集合中保存的数据。
我在这里遗漏了什么,还是没有“简单的方法”来使用这样的集合?
thread-safety - 这些是线程安全的吗?
我今天参加了一次面试,面试官问了我以下问题:
重入和互斥线程安全吗?你能解释一下为什么吗?
我对并发编程比较陌生,无法回答。但我说...
互斥是线程安全的。但是重入不是,这就是我们有重入锁的原因。
面试官转到了下一个问题,但转到了另一个领域……我想我把这个搞砸了……
当他问我这个时,他希望我说什么?
java - Java 阻塞问题:为什么 JVM 会阻塞许多不同类/方法中的线程?
更新:这看起来像是内存问题。一个 3.8 Gb 的 Hprof 文件表明,当这种“阻塞”发生时,JVM 正在转储其堆。我们的运营团队看到该站点没有响应,进行了堆栈跟踪,然后关闭了该实例。我相信他们在堆转储完成之前关闭了该站点。日志没有错误/异常/问题的证据——可能是因为 JVM 在生成错误消息之前就被杀死了。
原始问题 我们最近遇到了一个应用程序出现的情况——对最终用户来说——挂起。我们在应用程序重新启动之前获得了堆栈跟踪,我发现了一些令人惊讶的结果:在 527 个线程中,463 个线程状态为 BLOCKED。
过去 过去阻塞的线程通常有这个问题: 1)一些明显的瓶颈:例如一些数据库记录锁定或文件系统锁定问题导致其他线程等待。2) 所有被阻塞的线程都会阻塞在同一个类/方法上(例如 jdbc 或文件系统类)
异常数据 在这种情况下,我看到各种类/方法被阻止,包括 jvm 内部类、jboss 类、log4j 等,以及应用程序类(包括 jdbc 和 lucene 调用)
什么会导致 JVM 阻塞 log4j.Hierarchy.getLogger、java.lang.reflect.Constructor.newInstance的问题?显然某些资源“稀缺”,但哪种资源?
谢谢
将要
堆栈跟踪摘录
java - 多处理器编程:无锁堆栈
在为即将到来的并发系统考试做准备时,我正在尝试完成教科书“多处理器编程的艺术”中的一些问题。一个问题困扰着我:
练习 129:在我们的 LockFreeStack 对象中使用相同的共享 BackOff 对象来推送和弹出是否有意义?我们还能如何在 EliminationBackOffStack 中构建空间和时间的退避?
这个问题困扰着我,因为我首先想到的是它没有意义,因为退避对象所做的只是让进程等待,所以为什么不分享它呢?问题的第二部分完全让我无法理解,非常欢迎任何帮助。
LockFreeStack 的代码:
java - 如果不会发生争用,读取时是否需要同步
考虑下面的代码狙击手:
在 Time1 线程 Thread1 将更新“可变”变量。为了将内存从本地缓存刷新到主内存,setter 需要同步。在 Time2 时间(Time2 > Time1,没有线程争用)线程 Thread2 将读取 mutable 的值。
问题是——我需要把同步放在 getter 之前吗?看起来这不会导致任何问题 - 内存应该是最新的,并且 Thread2 的本地缓存应该由 Thread1 失效和更新,但我不确定。