From 7f948ded66edbdbe9d32d0d96826210d0df2fe7c Mon Sep 17 00:00:00 2001 From: Xu Shaohua Date: Thu, 14 Mar 2024 16:08:43 +0800 Subject: [PATCH] async: Update index --- src/SUMMARY.md | 3 +-- src/async/index.md | 14 ++++++++++++++ src/concurrency/actor-model.md | 1 - src/concurrency/concurrent-programming-model.md | 10 +++++++--- 4 files changed, 22 insertions(+), 6 deletions(-) delete mode 100644 src/concurrency/actor-model.md diff --git a/src/SUMMARY.md b/src/SUMMARY.md index 085c09b..13df149 100644 --- a/src/SUMMARY.md +++ b/src/SUMMARY.md @@ -144,13 +144,12 @@ - [自定义内存分配器](mem/customize-allocator.md) - [工具](mem/tools.md) - [并发](concurrency/index.md) - - [并发编程模型](concurrency/concurrent-programming-model.md) + - [并发编程模型 concurrency models](concurrency/concurrent-programming-model.md) - [共享内存 Shared memory](concurrency/shared-memory.md) - [消息传递 message passing](concurrency/message-passing.md) - [多进程编程](concurrency/multi-processing.md) - [多线程与线程池](concurrency/multi-threads.md) - [Channel](concurrency/channel.md) - - [Actor Model](concurrency/actor-model.md) - [Send and Sync](concurrency/send-and-sync.md) - [Arc 与 Weak](concurrency/arc.md) - [Mutex 与 MutexGuard](concurrency/mutex.md) diff --git a/src/async/index.md b/src/async/index.md index 203af85..e96f65f 100644 --- a/src/async/index.md +++ b/src/async/index.md @@ -1,5 +1,19 @@ # 异步编程 Asynchronous Programming +多线程并发模型, 会耗费很多的 CPU 和内存资源, 创建以及切换线程的成本也很高; 可以使用线程池来缓解部分问题. + +async并发模式可以降低对CPU和内存资源的过度使用, 只需要很少的数个系统级线程就可以创建大量的任务(tasks, +或者称作用户级线程), 每个任务的成本都很便宜. +这些任务可以有数以万计甚至是百万级的. +然后, 因为要带有运行时(runtime), 以及存储大量的状态机, async程序的可执行文件会更大. + +Rust 实现的异步式(async)并发编程模型, 有这些特点: + +- 以 `Future` 为中心, 当调用 `poll` 时执行程序, 当把 Future 丢弃时就终止程序 +- 零开销 (zero-cost), 不需要分配堆内存, 或者使用动态分发 (dynamic dispatch), 这样的话在嵌入式等资源受限的环境里依然可以使用 +- 标准库没有自带运行时 (runtime), 它们有社区提供, 目前使用量较多的有 tokio 和 async-std, 后面我们分别有所介绍 +- 运行时可以有单线程的, 也可以是多线程的 + ## 参考 - [Rust async book](https://rust-lang.github.io/async-book/) diff --git a/src/concurrency/actor-model.md b/src/concurrency/actor-model.md deleted file mode 100644 index 1e9ffc2..0000000 --- a/src/concurrency/actor-model.md +++ /dev/null @@ -1 +0,0 @@ -# actor model diff --git a/src/concurrency/concurrent-programming-model.md b/src/concurrency/concurrent-programming-model.md index b8e9fb3..668c27c 100644 --- a/src/concurrency/concurrent-programming-model.md +++ b/src/concurrency/concurrent-programming-model.md @@ -1,4 +1,4 @@ -# 并发编程模型 +# 并发编程模型 concurrency models 根据并发模块之间的通信方式的不同, 可以有两种分类: @@ -8,9 +8,13 @@ 根据并发模块运行方式的不同, 可以有三种分类: - 多进程 -- 系统级多线程, 线程由内核控制 -- 用户级多线程, 由用户态的编写的 rust 运行时调度线程, 目前就是 async/await 异步编程 +- 系统级多线程 (os threads), 线程由内核控制 +- 事件驱动 (event-driven programming), 与回调 (callback) 相结合, 当事件发生时回调函数被触发 +- Coroutines, 与多线程相同,不需要修改编程模型; 与 async 类似, 它们可以支持大量的任务 +- actor model, 除了编程语言支持它之外, 例如比较出名的 erlang, 也有不少框架也有实现这种模型, 比如 rust 里的 actix 库 +- async/await, 支持基于少数的系统级线程创建大量的任务 (tasks, 有时会被称为用户级线程), 而编写代码的过程与正常的顺序式编程基本一致 +要注意的是, rust 并不排斥其它并发模型, 这些模型都有开源的 crate 实现. 接下来几节会对它们单独解释. ## 参考