要查看此由AI生成的摘要,您必须拥有高级访问权限。
了解更多
登录
摘要
摘要
在并发程序的自动化测试和验证中,一个核心的计算问题是“一致性问题”:即“给定部分执行历史,是否可以以一致的方式完成程序的执行?”由于这一问题的重要性,对于内存模型以及数据库隔离级别的一致性测试已经进行了广泛的研究。在所有这些研究中,一个共同的主题是使用共享内存作为线程间通信的主要方式。另一方面,现代编程语言(如Go、Rust和Kotlin)提倡向基于通道(即消息传递)的通信模式转变。然而,基于通道的并发的一致性问题目前尚未得到充分理解。
在本文中,我们将对基本一致性问题的研究扩展到通道层面,考虑了各种输入参数,例如执行的线程数量、通道数量以及通道容量。我们描绘了一个复杂的复杂性图谱,包括在某些输入参数固定时的多项式上界以及难度下界。我们的上界基于可以在自动化验证工具中用于验证通道一致性的算法。我们的下界指出了足以引发难度问题的最小输入参数,从而揭示了测试基于通道的并发性的复杂性。结合我们的上界和下界,我们描述了验证通道一致性的“可解性/不可解性”的边界,并表明我们的算法通常是(几乎)最优的。我们还实现了主要的一致性检查算法,并设计了优化措施以提高其性能。我们评估了该算法在103个来自开源Go项目的实例上的性能,并将其与基于约束解决的算法进行了比较。实验结果表明,我们的一致性检查算法具有强大的能力;它可以处理大约100万个事件,并且在运行时间性能上明显优于基于约束解决的方法。
AI摘要
要查看此由AI生成的纯文本摘要,您必须拥有高级访问权限。