Rust编程语言入门之无畏并发

Posted 小乔的博客

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Rust编程语言入门之无畏并发相关的知识,希望对你有一定的参考价值。

无畏并发

并发

  • Concurrent:程序的不同部分之间独立的执行(并发)
  • Parallel:程序的不同部分同时运行(并行)
  • Rust无畏并发:允许你编写没有细微Bug的代码,并在不引入新Bug的情况下易于重构
  • 注意:本文中的”并发“泛指 concurrent 和 parallel

一、使用线程同时运行代码(多线程)

进程与线程

  • 在大部分OS里,代码运行在进程(process)中,OS同时管理多个进程。
  • 在你的程序里,各独立部分可以同时运行,运行这些独立部分的就是线程(thread)
  • 多线程运行:
    • 提升性能表现
    • 增加复杂性:无法保障各线程的执行顺序

多线程可导致的问题

  • 竞争状态,线程以不一致的顺序访问数据或资源
  • 死锁,两个线程彼此等待对方使用完所持有的资源,线程无法继续
  • 只在某些情况下发生的 Bug,很难可靠地复制现象和修复

实现线程的方式

  • 通过调用OS的API来创建线程:1:1模型
    • 需要较小的运行时
  • 语言自己实现的线程(绿色线程):M:N模型
    • 需要更大的运行时
  • Rust:需要权衡运行时的支持
  • Rust标准库仅提供1:1模型的线程

通过 spawn 创建新线程

  • 通过 thread::spawn 函数可以创建新线程:
    • 参数:一个闭包(在新线程里运行的代码)
➜ cd rust

~/rust
➜ cargo new thread_demo
     Created binary (application) `thread_demo` package

~/rust
➜ cd thread_demo

thread_demo on  master [?] via 

Rust编程语言入门之编写自动化测试

编写自动化测试

一、编写和运行测试

测试(函数)

  • 测试:
    • 函数
    • 验证非测试代码的功能是否和预期一致
  • 测试函数体(通常)执行的3个操作:
    • 准备数据/状态
    • 运行被测试的代码
    • 断言(Assert)结果

解剖测试函数

  • 测试函数需要使用 test 属性(attribute)进行标注
    • Attribute就是一段Rust代码的元数据
    • 在函数上加 #[test],可把函数变成测试函数

运行测试

  • 使用 cargo test 命令运行所有测试函数

    • Rust会构建一个 Test Runner 可执行文件
    • 它会运行标注了 test 的函数,并报告其运行是否成功
  • 当使用 cargo 创建 library 项目的时候,会生成一个 test module,里面有一个test 函数

    • 你可以添加任意数量的 test module 或 函数
~/rust
➜ cargo new adder --lib
     Created library `adder` package

~/rust
➜ cd adder

adder on  master [?] via 

以上是关于Rust编程语言入门之无畏并发的主要内容,如果未能解决你的问题,请参考以下文章

Rust编程语言入门之高级特性

Rust编程语言入门之项目实例:- 命令行程序

Rust编程语言入门之编写自动化测试

Rust编程语言入门之模式匹配

Rust编程语言入门之智能指针

Rust语言:安全地并发

(c)2006-2024 SYSTEM All Rights Reserved IT常识