目前使用的并发编程有很多范例和方法。软件事务内存,参与者,共享状态并发,元组空间以及许多等等。
然而,我发现缺少的是一个有趣的并发测试问题库。一个众所周知的例子是“餐饮哲学家问题”,它既不复杂也不激励,也不现实。然后有许多并行算法(矩阵乘法,渲染,通用嵌套数据并行)只需要分配工作,但没有真正的并发与执行线程之间的通信。
那么,有人能指出一些有趣的问题,这些问题需要在交互式,甚至是分布式环境中实现真正的并发,这些问题很简单,可以用作并发范例的例子吗?理想情况下,我想找到一系列问题,作为并发范式的“缺乏考验”(或突出它们的差异,因为每个范例都有其优点和缺点)。
非常感谢任何帮助:)
答案 0 :(得分:4)
我之前已经考虑过这个问题,之前我自己提出了一些并发编程范例:p
我得出的结论是,这样的测试集似乎并不是以与语言无关的方式存在。虽然它可能有助于它存在,但它似乎有一些相当好的理由(据我所知)。
并发编程中的大多数关注点往往是数据并行,因此相同的操作并行应用于同一数据集的不同部分。我认为你所谈论的任务级并行性(即并行执行的不同任务,可能共享数据)实际上并没有做太多。我想这是因为它有点难。但我认为这也很难,因为大多数问题并不能很好地适应这种并发性。根据并发原语描述分布式系统可能会有所帮助,但这些系统往往是分离的,因此存在协调(书面或暗示)协调其通信的协议。人们往往不会将这些类型的系统视为明显的“并发”编程情况,即使它们是在正确的框架内查看时(即将“客户端”和“服务器”视为与某些点同步并行运行的代理)
我认为你能找到一些灵感来源的唯一地方是个人实施。 Erlang,Occam(和Occam-pi),Alice,CML,Concurrent Haskell等都可能有小型测试语料库,但问题及其实现都会偏向于在特定语言中实现(因为它们显然是可以用那种语言实现!)。也许您还可以查看处理multi-party session types的社区,以及pi-calculus,CCS和CSP等各种process calculi,以了解他们使用哪种系统作为示例模型。我认为,用于描述并发通信系统的标准语言无关的问题集的想法很有吸引力,但在这一点上有些难以捉摸。