Questions tagged «concurrency»

关于同步和死锁等并发问题的质疑。


3
对比Peterson和Dekker的算法
我试图理解Peterson和Dekker的算法,它们非常相似并且显示出很多对称性。 我试图用非正式语言来制定算法,如下所示: Peterson's: "I want to enter." flag[0]=true; "You can enter next." turn=1; "If you want to enter and while(flag[1]==true&&turn==1){ it's your turn I'll wait." } Else: Enter CS! // CS "I don't want to enter any more." flag[0]=false; Dekker's: "I want to enter." flag[0]=true; "If you want to enter …


2
“真正的并发”是什么意思?
我经常听到诸如“真正的并发语义”和“真正的并发等效”之类的短语而没有任何参考。这些术语是什么意思,为什么重要? 真正的并发等效的一些例子是什么,对它们有什么需求?例如,在哪些情况下它们比更多的标准等价物(双仿真,痕量等价物)更适用?

3
主要过程代数的异同
据我所知,有三个主要的过程代数启发了对并发形式模型的大量研究。这些是: CCS和演算都由Robin Milner撰写ππ\pi 托尼·霍尔(Tony Hoare)和 Jan Bergstra和Jan Willem Klop撰写的ACP 到目前为止,这三者似乎都非常活跃,并且已经对它们进行了大量研究。 这些方法的主要异同是什么?在没有统一模型统一领域的意义上,为什么过程代数的研究发散而不是收敛?

1
无锁,恒定的更新时间并发树数据结构?
我最近阅读了一些文献,并且发现了一些相当有趣的数据结构。 我研究了各种不同的方法来将更新时间降低到最坏情况下的更新时间[1-7]。O(1)O(1)\mathcal{O}(1) 最近,我开始研究无锁数据结构,以支持有效的并发访问。 在无锁数据结构的实现中是否使用了这些最坏情况下的更新时间技术?O(1)O(1)\mathcal{O}(1) 我问是因为 在我看来,它们似乎是这种“理论上的增强”的明显实践扩展。 Tarjan,Robert Endre。“以O(1)循环更新平衡的搜索树。”《信息处理快报》,第16号,否。5(1983):253 – 257。 Driscoll,JR,N Sarnak,DD Sleator和RE Tarjan。“使数据结构持久化”。在第18届ACM计算理论年度学术会议论文集中,109-121。STOC '86。美国纽约州:ACM,1986年。 Levcopoulos,C。和Mark H. Overmars。“具有O(1)最坏情况更新时间的平衡搜索树。” Acta Inf。26号 3(1988年11月):269-277。 鲁道夫·弗莱舍。具有O(1)最坏情况更新时间的简单平衡搜索树 Dietz,Paul F和Rajeev Raman。“一个恒定的更新时间手指搜索树。”信息处理,第52号信。3(1994):147 – 154。 Lagogiannis,George,Christos Makris,Yannis Panagis,Spyros Sioutas和Kostas Tsichlas。“具有最坏情况下恒定更新时间的新动态平衡搜索树。” J. Autom。郎 梳子。8号 4(2003年7月):607-632。 Brodal,GerthStølting,George Lagogiannis,Christos Makris,Athanasios Tsakalidis和Kostas Tsichlas。“指针机器中的最佳手指搜索树。” J. Comput。Syst。科学 67号 2(2003年9月):381-418。

6
为什么必须以倒序取消未提交的事务?
我有一个数据库日志,其中有一些事务获胜(它们在崩溃之前已提交)和一些事务(尚未提交)。我们在课堂上了解到,失败者的行为必须向后撤消。 有什么理由倒退吗?谁能给出一个简单的日志示例,其中正向撤消操作将导致错误的结果?



1
角色模型与通信顺序过程(CSP)之间的差异
当我们查看Actor模型和通信顺序过程时,我们看到它们都试图基于消息传递来进行并发,但是它们是截然不同的。 (我们在go-lang的goroutines(和Clojure的core.async)中看到了CSP模型的实现,在Scala的Akka工具包中看到了Actor模型的实现) 我正在尝试获取Actor模型和CSP之间差异的简单列表。到目前为止,我有: actors消息传递是异步的,CSP消息传递是同步的 参与者是可组合的,CSP不是必需的 参与者始终具有无限的不确定性,CSP可能具有无限的不确定性 参与者具有可变拓扑,而CSP具有固定拓扑 参与者有地方性原则,CSP没有地方性 演员是根据自己的行为设计的,CSP不一定有这个 它是否正确?有什么我想念的吗? 假设条件 当我说“演员模型”时,我的意思是在Scala的Akka框架中实施的理论基础

2
基于堆栈的编程语言是否可以并发?
我一直在阅读有关基于堆栈的编程语言(例如FORTH和Cat),并且看来,鉴于它们的性质,无论它们的范例如何,它们一次只能执行一个动作(FORTH是必不可少的,而Cat是功能性的)。 命令式语言将修改堆栈,而纯功能性语言(如Joy)将返回新堆栈,但要点是一次只能使用一个堆栈。 那么,基于堆栈的编程语言可以并发吗?他们可以通过同时使用多个堆栈或类似方式来实现并发吗? 是否可以在基于堆栈的编程语言中实现惰性评估? 如果我对上述语言和概念有误解,请纠正我

3
谁需要线性化?
我一直在阅读可序列化性和线性化性之间的差异,这两者都是复制系统(如复制数据库)的一致性标准。但是,我不知道在什么情况下需要线性化,即使它比可序列化要强。 您能否提出实际上需要这种强大属性的方案?

2
CPU体系结构是否偏向于程序运行时?
是否可以对CPU进行任何更改,以使它们在诸如Rust的并行运行时性能更好?例如,是否对分支预测实现或缓存大小进行了更改,以帮助并发运行时? 我的印象是,当前的CPU设计可能会针对诸如C之类的过程运行时进行更多优化。如果我们改为针对并发运行时进行优化,那么CPU看起来会有什么不同? 出于重要性,分支预测是基于分析过程代码的研究论文中得出的概括来实现的。我想知道并发抽象是否会给运行时添加一个重要的工作集,从而对现有分支预测算法产生不利影响。例如,在for循环中进行预测是一回事,但是当分支的目标始终是内存的某些新部分(图形,文本等)时,它将始终是缓存未命中,并且永远不会存在分支它的历史-因为还没有人碰过它。 这可能是一个愚蠢的问题,因为尽管内容可能始终位于RAM中,但其内容将被分支到比将要使用的数量级小(一旦被加载到缓存中)...但是仍然在过程运行时中,它应该是存储在缓存和分支预测变量中的上下文的可观察时间边界,这在更加并行化的环境中将表现为抽象边界。所以我想知道...是否遵守了这些界限?有研究论文对此进行分析吗? CPU体系结构是否偏向于过程代码而不是并发代码?还是现代的CPU具有足够的通用性而不会遭受高并发语言的困扰?

2
良好的快照表数据结构可用于内存索引
我正在为一个非常特殊的用例设计内存对象数据库。它是单个编写器,但必须支持有效的并发读取。读取必须隔离。没有查询语言,数据库仅支持: 通过属性/属性集获取对象(例如,可能支持表达式x.count < 5) 获取对象的属性 查询是命令脚本,由任意数量的上述操作组成。数据大小将是<< <<内存,因此大多数属性上的所有对象和索引都应舒适地容纳而无需交换。 我需要的是对象属性索引的数据结构,该数据结构在写入时可以为O(n),不支持写入并发,但理想情况下应支持O(1)快照(可能在写入时进行复制)和O(logN)访问。理想情况下,这将允许读取时具有高并发性,并在版本之间实现最大的结构共享。 我当时在看CTries,并发BST和并发Splay 树,但是我不确定我是否真的在朝正确的方向看。上面的结构非常关注我不关心的插入物的复杂性。 问题:是否有一个现成的数据结构适合我的用例? 编辑:经过更多思考之后,似乎持久的BST / Splay树将起作用。编写者将更新“主”副本,查询将在执行开始时获得该树,并在完成后将其丢弃。但是,我仍然对是否有更好的解决方案感兴趣。


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.