diff --git a/src/async-rust/tokio/channels.md b/src/async-rust/tokio/channels.md index 13b65c66..f92dc232 100644 --- a/src/async-rust/tokio/channels.md +++ b/src/async-rust/tokio/channels.md @@ -66,7 +66,7 @@ async fn main() { 在这种模式下,只需要建立一条连接,然后由一个统一的任务来管理 `client` 和该连接,这样之前的 `get` 和 `set` 请求也将不存在资源共享的问题。 -同时,`P1` 和 `C1` 进行通信的消息通道是有缓冲的,当大量的消息发送给 `C1` 时,首先会放入消息通道的缓冲区中,当 `C1` 处理完一条消息后,再从该缓冲区中取出下一条消息进行处理,这种方式跟消息队列( mq ) 非常类似,可以实现更高的吞吐。而且这种方式还有利于实现连接池,例如不止一个 `P` 和 `C` 时,多个 `P` 可以往消息通道中发送消息,同时多个 `C`,其中每个 `C` 都维护一条连接,并从消息通道获取消息。 +同时,`P1` 和 `C1` 进行通信的消息通道是有缓冲的,当大量的消息发送给 `C1` 时,首先会放入消息通道的缓冲区中,当 `C1` 处理完一条消息后,再从该缓冲区中取出下一条消息进行处理,这种方式跟消息队列( Message queue ) 非常类似,可以实现更高的吞吐。而且这种方式还有利于实现连接池,例如不止一个 `P` 和 `C` 时,多个 `P` 可以往消息通道中发送消息,同时多个 `C`,其中每个 `C` 都维护一条连接,并从消息通道获取消息。 ## Tokio 的消息通道( channel ) diff --git a/src/async-rust/tokio/getting-startted.md b/src/async-rust/tokio/getting-startted.md index 342a5ca9..36a5757c 100644 --- a/src/async-rust/tokio/getting-startted.md +++ b/src/async-rust/tokio/getting-startted.md @@ -10,7 +10,7 @@ #### mini-redis -`redis` 的项目源码可以在[这里访问](https://github.com/sunface/rust-course/tree/main/pratice/mini-redis),本项目是从[官方地址](https://github.com/tokio-rs/mini-redis) `fork` 而来,在未来会提供注释和文档汉化。 +`redis` 的项目源码可以在[这里访问](https://github.com/sunface/rust-by-practice/tree/master/zh-CN/assets/mini-redis),本项目是从[官方地址](https://github.com/tokio-rs/mini-redis) `fork` 而来,在未来会提供注释和文档汉化。 再次声明:该项目仅仅用于学习目的,因此它的文档注释非常全,但是它完全无法作为 `redis` 的替代品。 @@ -29,7 +29,7 @@ rustc 1.58.0 (02072b482 2022-01-11) $ cargo install mini-redis ``` -> 如果下载失败,也可以通过[这个地址](https://github.com/sunface/rust-course/tree/main/pratice/mini-redis)下载源码,然后在本地通过 `cargo run`运行。 +> 如果下载失败,也可以通过[这个地址](https://github.com/sunface/rust-by-practice/tree/master/zh-CN/assets/mini-redis)下载源码,然后在本地通过 `cargo run`运行。 下载成功后,启动服务端: diff --git a/src/async-rust/tokio/spawning.md b/src/async-rust/tokio/spawning.md index fb88590f..9682319e 100644 --- a/src/async-rust/tokio/spawning.md +++ b/src/async-rust/tokio/spawning.md @@ -171,7 +171,7 @@ help: to force the async block to take ownership of `v` (and any other 但是 `move` 有一个问题,一个数据只能被一个任务使用,如果想要多个任务使用一个数据,就有些强人所难。不知道还有多少同学记得 [`Arc`](https://course.rs/advance/smart-pointer/rc-arc.html),它可以轻松解决该问题,还是线程安全的。 -在上面的报错中,还有一句很奇怪的信息`function requires argument type to outlive 'static`, 函数要求参数类型的生命周期必须比 `'static` 长,问题是 `'static` 已经活得跟整个程序一样久了,难道函数的参数还能活得更久?大家可能会觉得编译器秀逗了,毕竟其它语言编译器也有秀逗的时候:) +在上面的报错中,还有一句很奇怪的信息```function requires argument type to outlive `'static` ```, 函数要求参数类型的生命周期必须比 `'static` 长,问题是 `'static` 已经活得跟整个程序一样久了,难道函数的参数还能活得更久?大家可能会觉得编译器秀逗了,毕竟其它语言编译器也有秀逗的时候:) 先别急着给它扣帽子,虽然我有时候也想这么做。。原因是它说的是类型必须活得比 `'static` 长,而不是值。当我们说一个值是 `'static` 时,意味着它将永远存活。这个很重要,因为编译器无法知道新创建的任务将存活多久,所以唯一的办法就是让任务永远存活。 diff --git a/src/basic/trait/trait-object.md b/src/basic/trait/trait-object.md index b52fef95..3bddb664 100644 --- a/src/basic/trait/trait-object.md +++ b/src/basic/trait/trait-object.md @@ -110,7 +110,7 @@ pub struct Screen { 可以通过 `&` 引用或者 `Box` 智能指针的方式来创建特征对象。 -> `Boxt` 在后面章节会[详细讲解](https://course.rs/advance/smart-pointer/box.html),大家现在把它当成一个引用即可,只不过它包裹的值会被强制分配在堆上 +> `Box` 在后面章节会[详细讲解](https://course.rs/advance/smart-pointer/box.html),大家现在把它当成一个引用即可,只不过它包裹的值会被强制分配在堆上 ```rust