Crossbeam-rs

Rust 并发库
授权协议 Apache
开发语言 Rust
所属分类 程序开发、 高性能网络开发库
软件类型 开源软件
地区 不详
投 递 者 薛烨霖
操作系统 未知
开源组织
适用人群 未知
 软件概览

Crossbeam 是一款 Rust 并发库,提供了一系列用于并发编程的工具:

Atomics

  • AtomicCell, 线程安全的可变内存位置 (no_std)
  • AtomicConsume, 用于从具有"consume"顺序的原始原子类型中读取 (no_std)

数据结构

  • deque, 用于构建任务调度程序的 work-stealing 双端队列
  • ArrayQueue, 有界 MPMC 队列,在构造时分配一个固定容量的缓冲区 (alloc)
  • SegQueue, 无界 MPMC 队列,按需分配小的缓冲区、段 (alloc)

内存管理

  • epoch, 基于 epoch 的垃圾回收器 (alloc)

线程同步

  • channel, 使用多生产者多消费者渠道进行消息传递
  • Parker, a thread parking primitive.
  • ShardedLock, 具有快速并发读取的分片读写锁 (reader-writer lock)
  • WaitGroup, 用于同步某些计算的开始或结束
  • 作者 | 施继成  转自《Rust Magazine中文精选》 上次的文章介绍了无锁数据结构的内存管理机制 EBR,该机制相较于其他的内存管理机制具有更高的执行效率。然而由于理念的复杂性,EBR 的实现并不容易,为每一个无锁数据结构从头实现 EBR 也无必要,因此很自然得大家会考虑将 EBR 的核心理念 epoch 抽取出来变成库,让大家能够复用。Crossbeam-epoch 是一套成熟的被大家

 相关资料
  • 考虑以下方法: 尤其是这两条线: 如果线程A进入synchronized块并获得当前对象的锁,这是否意味着该对象的实例属性的状态不能被synchronized块之外的其他线程改变(当线程A在synchronized块中时)? 例如,线程A执行了第1行- 消息是非静态同步列表 UPD:更新的方法,可能的解决方案: addLock - AtomicBoolean,默认为false

  • 我需要一个线程安全的并发列表,同时最适合迭代,并且应该返回精确的大小。我想存储物品的拍卖出价。所以我想能够 检索项目的确切出价数量 为项目添加出价 检索给定项目的所有出价。 移除商品出价 我打算把它放在

  • 并发 用 Promises 替代回调 回调不够整洁并会造成大量的嵌套。ES6 内嵌了 Promises,使用它吧。 反例: require('request').get('https://en.wikipedia.org/wiki/Robert_Cecil_Martin', function(err, response) { if (err) { console.error(err);

  • Concurrency 并发 Share by communicating 通过通信共享内存 Concurrent programming is a large topic and there is space only for some Go-specific highlights here. 并发编程是个很大的论题。但限于篇幅,这里仅讨论一些 Go 特有的东西。 Concurrent prog

  • 计算机用户想当然地认为他们的系统在一个时间可以做多件事。他们认为,他们可以工作在一个字处理器,而其他应用程序在下载文件,管理打印队列和音频流。即使是单一的应用程序通常也是被期望在一个时间来做多件事。例如,音频流应用程序必须同时读取数字音频,解压,管理播放,并更新显示。即使字处理器应该随时准备响应键盘和鼠标事件,不管多么繁忙,它总是能格式化文本或更新显示。可以做这样的事情的软件称为并发软件(conc

  • 并发 现代服务是高度并发的—— 服务器通常是在10–100秒内并列上千个同时的操作——处理隐含的复杂性是创作健壮系统软件的中心主题。 线程提供了一种表达并发的方式:它们给你独立的,堆共享的(heap-sharing)由操作系统调度的执行上下文。然而,在Java里线程的创建是昂贵的,是一种必须托管的资源,通常借助于线程池。这对程序员创造了额外的复杂,也造成高度的耦合:很难从所使用的基础资源中分离应用