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编程语言入门之无畏并发的主要内容,如果未能解决你的问题,请参考以下文章