7

今天有大量用于并发编程的范例和方法。软件事务内存、参与者、共享状态并发、元组空间等等。

然而,我发现缺少的是一个有趣的并发测试问题库。一个众所周知的例子是“餐饮哲学家问题”,它既不够复杂,也不够励志,也不够现实。然后有许多并行算法(矩阵乘法,渲染,一般嵌套数据并行)只需要分配工作,但没有真正的并发与执行线程之间的通信。

那么,谁能指出一些有趣的问题,这些问题需要在交互式甚至分布式环境中实现真正的并发,这些问题足够简单,可以用作并发范式的示例?理想情况下,我想找到一组问题作为并发范式的“缺乏测试”(或突出它们的差异,因为每个范式都有其优点和缺点)。

任何帮助深表感谢 :)

4

1 回答 1

4

我之前已经考虑过这个确切的问题,之前我自己提出了一些并发编程范例:p

我当时得出的结论是,这样的测试集似乎并不真正以独立于语言的方式存在。虽然它的存在可能会有所帮助,但似乎有一些很好的理由它不存在(据我所知)。

并发编程中的大部分重点往往是数据并行性, 以便将相同的操作并行应用于同一数据集的不同部分。我认为您正在谈论的那种任务级并行性(即并行执行的不同任务,可能共享数据)实际上并没有做太多。我认为这是因为它有点难。但我认为这也有点困难,因为大多数问题并不特别适合这种并发性。用并发原语来描述分布式系统可能会有所帮助,但是这些系统往往是解耦的,因此有一个协议(书面的或暗示的)来调节它们的通信。人们倾向于不将这些类型的系统视为明显的“并发”编程情况,即使在正确的框架内查看它们(即考虑“

我认为你可以找到一些灵感来源的唯一地方是在单独的实现中。Erlang、Occam(和 Occam-pi)、Alice、CML、Concurrent Haskell 等都可能有小型测试语料库,但问题及其实现都将偏向于在特定语言中实现(因为它们显然是可在该语言中实现!)。也许您还可以查看致力于多方会话类型的社区以及各种过程演算,例如 pi-calculus、CCS 和 CSP,以了解他们使用哪些类型的系统作为示例模型。用于描述并发通信的与标准语言无关的一组问题的想法我认为,系统很有吸引力,但在这一点上有些难以捉摸。

于 2010-08-19T17:07:05.457 回答