当今使用的并发编程的范例和方法太多了。软件事务内存、参与者、共享状态并发、元组空间等等。
然而,我发现缺少的是一个有趣的并发测试问题库。一个著名的例子是“就餐哲学家问题”,这个问题既不够复杂,也不够激动人心,也不现实。然后有许多并行算法(矩阵乘法,渲染,通用嵌套数据并行),它们只需要分配工作,而不是真正的并发执行线程之间的通信。
那么,有没有人能给我指出一些有趣的问题,这些问题在交互式甚至分布式环境中需要真正的并发性,这些问题足够简单,可以用作并发范例的示例?理想情况下,我希望找到一组问题来作为并发范例的"lackmus-test“(或者突出它们的差异,因为每个范例都有它的优点和缺点)。
任何帮助都是非常感谢的:)
发布于 2010-08-20 01:07:05
我之前考虑过这个问题,之前我自己也提出了一些并发编程范例:p
我当时得出的结论是,这样的测试集似乎并不是真正以独立于语言的方式存在的。虽然它的存在可能是有帮助的,但似乎有一些相当好的理由它不存在(据我所知)。
并发编程中的大部分焦点都倾向于数据并行性,以便将相同的操作并行地应用于相同数据集的不同部分。我认为你所说的任务级并行(即不同的任务并行执行,可能共享数据)实际上并没有做得太多。我想这是因为这有点难。但我认为这也有点困难,因为大多数问题都不适合这种并发。用并发原语描述分布式系统可能会有帮助,但这些系统往往是解耦的,这样就有一个协议(写的或暗示的)来调节它们的通信。人们倾向于不认为这些类型的系统是明显的“并发”编程情况,即使在正确的框架内看待它们(即,将“客户端”和“服务器”视为在某些点上与同步并行操作的代理)。
我认为你唯一能找到灵感来源的地方是在单独的实现中。Erlang,Occam (和Occam-pi),Alice,CML,Concurrent Haskell等都可能有很小的测试语料库,但问题和它们的实现都偏向于在特定语言中实现(因为它们显然是可以在该语言中实现的!)。也许你也可以看看从事multi-party session types工作的社区,以及各种process calculi,比如π演算、CCS和CSP,看看他们使用什么类型的系统作为示例模型。描述并发通信系统的标准语言不可知问题集的想法很吸引人,但我认为在这一点上有点难以捉摸。
https://stackoverflow.com/questions/3512818
复制相似问题