rust学习十六.1、并发-乱弹和一个简单并发例子

如书本作者所言,并发编程在绝大部分语言中,都是相对复杂和困难的。

所以,涉及的内容会相对多一些,所涵盖的内容绝对不是几篇文章所可以容纳的。

权当一个乱弹琴!

和此系列的其它文章一样,本文的内容绝大部分来自于相关书籍,本人做了一些摘裁的工作,取我所需!

 

一、无畏并发

* 1.并发(concurrent)和并行(parallel)的区别. 前者是不同程序相互独立运行,强调独立;并行则是不同程序同时运行,强调同时.
 *   但事实上,并发也有同时的概念
 * 2.所有权和类型系统是一系列解决内存安全 和 并发问题的强有力的工具!通过利用所有权和类型检查,在 Rust 中很多并发错误都是 编译时 错误,而非运行时错误
 * 3.可以在开发时修复代码,而不是在部署到生产环境后修复代码  -- 这就是无畏并发(fearless concurrency)的由来。 这是
 *   rust的所有权和类型系统检查所带来的好处
 * 4.rust认为所有权系统和类型检查那么重要,而这是导致它的代码特别难于阅读和理解的缘故

二、rust的并发工具

 期望提供在任何给定的情况下有着最高的性能且对硬件有更少的抽象
 * 1.消息传递(Message passing)并发,其中信道(channel)被用来在线程间传递消息。
 * 2.共享状态(Shared state)并发,其中多个线程可以访问同一片数据。
 * 3.Sync 和 Send trait,将 Rust 的并发保证扩展到用户定义的以及标准库提供的类型中。

三、简单的示例

 以下例子是改自书本:

复制代码
 use std::thread;
 use std::time::Duration;
 fn main() {
    let v = vec![1, 2, 3,4,5,6,7,8,9,10];
    let handle = thread::spawn(move ||->Vec<i32> {    //如果这里不添加move关键字,编译会报错
        println!("Here's a vector: {:?}",v);
        //循环v,每次等待50毫秒
        for i in v.iter() {
            println!("T-1-waiting...:{}  ***(^^)",i);
            thread::sleep(Duration::from_millis(50));
        }
        v
    });

    //循环10次,每次等待20毫秒
    for x in 0..10 {
        println!("T-0-waiting...:{}",x);
        thread::sleep(Duration::from_millis(20));
    }
    let p=handle.join().unwrap();
    println!("It's back!{:?}",p);
}
复制代码

 

 

这个例子的几个重点:

  •    匿名函数(闭包) 和MOVE
  • thread::spawn 创建一个子线程,并返回一个JoinHandle<T>
  •   JoinHandle.join() 返回一个 Result
复制代码
#[stable(feature = "rust1", since = "1.0.0")]
pub fn spawn<F, T>(f: F) -> JoinHandle<T>
where
    F: FnOnce() -> T,
    F: Send + 'static,
    T: Send + 'static,
{
    Builder::new().spawn(f).expect("failed to spawn thread")
}
复制代码

 

impl<'scope, T> JoinInner<'scope, T> {
    fn join(mut self) -> Result<T> {
        self.native.join();
        Arc::get_mut(&mut self.packet).unwrap().result.get_mut().take().unwrap()
    }
}

 

posted @   正在战斗中  阅读(28)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek-R1本地部署如何选择适合你的版本?看这里
· 传国玉玺易主,ai.com竟然跳转到国产AI
· 自己如何在本地电脑从零搭建DeepSeek!手把手教学,快来看看! (建议收藏)
· 我们是如何解决abp身上的几个痛点
· 普通人也能轻松掌握的20个DeepSeek高频提示词(2025版)
点击右上角即可分享
微信分享提示