< 返回版块

[Rust每日新闻 - 2018-08-09]

ChaosBot 发表于

系列文章:用Rust进行数据处理 Part 1

数据处理往往是Python的强项,但是该文作者会告诉你,Rust可以做的更好。

该文着重讲nalgebra,一个矩阵和向量的科学计算库。该系列文章之后还会介绍ndarray,相当于python中的numpy。

nalgebra允许开发者对矩阵(QR,SVD ......)进行多次分解,找到行列式和特征值,并进行大量的计算机图形操作(旋转,投影......等)

原文


Rust并发模式文章导读:通过共享Sender通信

有朋友说新闻里发的并发模式三篇文章难以理解,所以我在这里帮忙做一个导读,今天是第一篇:通过共享Sender进行通信。

在阅读本文前,最好能对Rust的Channel有比较详细的了解。

  • Rust和Go都奉行「通过通信来共享」的原则,但要注意Rust和Go中Channel的不同。
  • Rust中的mpsc,指的是多生产者,单消费者FIFO队列。
  • Rust的通道两端只能有同时由一个线程「拥有」,但是Sender端是可以通过clone来共享给多个线程,这就是所谓的mpsc。
  • 而Go的表现则是一个mpmc,多生产者多消费者。
  • Rust channel默认支持异步channel,可以使用SyncChannle支持同步channel。

文章中用于说明Rust channel用法的示例主要采用下面并发架构:

  • 主线程从生产者(producer)那里接受消息
  • 根据producer的消息,将任务分配给工作池
  • 将工作的结果聚合给消费者
  • 最终将结果返回给主线程

因此需要下面几个并发组件:

  • producer, 生产要一些「工作任务」
  • 主线程,指派工作任务
  • 一组 worker执行任务
  • Consumer, 接收工作任务结果
  • 一切完成以后回到主线程

具体的实现流程:

  • 创建和分享channel。 首先需要在主线程建立两个channel: 用于接收consumer结果,以及用于从producer接收任务。
  • 创建了一个loop循环,使用mpsc_select,提供了Select,可以同时处理 consumer结果和producer任务的句柄。也可以使用第三方库 crossbeam-channel
  • 如果只有一个输出端(recevier),如何通过channel给 worker分配任务?答案是建立一个新的channle(如第一条所说),并将sender放到一个VecDeque双端队列里面,循环使用。
  • 将所有工作汇总到给消费者,完成后回到主线程

此外,还有围绕该示例的一些重要问题思考,可以参考完整源码去阅读。


2018年Rust社区调查开始了

请大家到 调查问卷 填写中文版问卷。

顺便可以将问卷转发给你们知道的使用Rust或对其有兴趣的人/


redis-rs 发布0.9

  • 支持了futures-rs 异步接口
  • 允许异步链接

注意:此次异步支持当前还是实验性的

release notes


评论区

还没有评论

共 0 评论, 共 0 页