中文

Rust并发特性的实践分析

分布式、并行与集群计算 2019-04-30 v1 编程语言

摘要

正确的并发程序难以编写;当多个线程变更共享数据时,可能会丢失写入、破坏数据或产生不稳定的程序行为。虽然通过在代码中放置锁可以避免许多并发相关的数据竞争问题,但这些锁常常使程序执行串行化,并显著拖慢性能关键型应用。程序员也会犯错,常常在较少执行的代码路径中忘记加锁,导致程序仅在罕见情况下出现异常行为。Rust 是 Mozilla 近期推出的一种编程语言,试图通过在编译时检测数据竞争来解决这些交织的问题。Rust 的类型系统将数据结构在线程间共享的能力编码于类型系统中,进而使编译器能够拒绝那些线程在无锁或其他保护机制下直接变更共享状态的程序。在本文中,我们考察 Rust 类型系统的这一方面如何影响并发数据结构的开发与精炼,以及其适应下述情形(其中正确性由无法直接在该类型系统本身中表达的底层不变式(例如无锁算法中)保证)的能力。我们详述了一个并发无锁哈希表的实现,以描述 Rust 语言的这些特性。我们的代码公开于 https://github.com/saligrama/concache,是 Rust 语言中最快的并发哈希表之一,有助于缓解并发程序中的瓶颈。

关键词

引用

@article{arxiv.1904.12210,
  title  = {A Practical Analysis of Rust's Concurrency Story},
  author = {Aditya Saligrama and Andrew Shen and Jon Gjengset},
  journal= {arXiv preprint arXiv:1904.12210},
  year   = {2019}
}

备注

15 pages, 2 figures