Rust笔记

【译】Rust,无畏并发 - Praying - 博客园原文链接:https://dev.to/imaculate3/fearless-concurrency-5fk8 > 原文标题:That's so Rusty! Fearless conhttps://www.cnblogs.com/praying/p/13912955.html

Rust 并发(Concurrency)的主要构成是线程和闭包。     

        闭包(Closures)。闭包是指能够访问在其所被定义的作用域内的变量的匿名函数。它们是 Rust 的函数式特性之一。它们可以被赋予变量,作为参数传递以及从函数中返回。它们的作用域仅限于局部变量,因此,不能暴露在 crate 之外。在语法上,除了没有名字之外,它们和函数非常相似,参数在竖线括号(||)中传递,类型标注是可选的。和函数不同的是,闭包能够从其被定义的作用域内访问变量。这些被捕获的变量可以以借用(borrow)或移动(move)的方式进入闭包,具体取决于变量的类型以及该变量如何在闭包中被使用。

       线程(Threads)。Rust 并发是通过生成(spawn)多个线程来实现的,这些线程运行处于无参数闭包中的不同任务。当一个线程被生成(spawn)时,返回类型时JoinHandle类型,除非JoinHandle被 joined,否则主线程不会等待它完成。因此,传递给线程的闭包必须拿到被捕获变量的所有权以确保在线程最终执行的时候,这些被捕获变量依然时有效的。

       在标准库中,Rust 支持了两种通信方式:消息传递(Message Passing)和共享状态(Shared-State)。

       消息传递(Message Passing)。Rust 支持 channel,线程可以通过 channel 来发送和接收消息。一个例子就是多生产者单消费者(缩写为mpsc)channel。这种 channel 允许多个发送方和单个接收方通信,这些发送方和接收方可能处于不同的线程中。channel 在发送方结尾处获取变量的所有权,并在接收方结尾处将其丢弃。

       共享状态(Shared State)。消息传递固然很好,但是它受单个所有权限制。对象必须被移动(move)/克隆(clone)才能传送到另一个线程,如果对象被移动(move),它就变为不可用,如果它被克隆(clone),在该对象上的任何更新都必须要通过消息传递来通信。解决这个问题的方案是多所有权( multiple ownership),多所有权( multiple ownership)通过引用计数智能指针Rc来实现。通过和RefCell组合使用,我们可以创建可变的共享指针。

你可能感兴趣的:(Rust,rust)