mirror of
https://github.com/gnu4cn/rust-lang-zh_CN.git
synced 2025-01-30 22:20:12 +08:00
Update Ch20
This commit is contained in:
parent
8388fb66b0
commit
3754326fec
@ -820,4 +820,11 @@ impl ThreadPool {
|
||||
|
||||
**A `Worker` Struct Responsible for Sending Code from the `ThreadPoll` to a Thread**
|
||||
|
||||
在清单 20-14 中的那个 `for` 循环里,咱们留了一个有关线程创建过程的注释。这里,咱们将看看咱们具体要怎么创建出那些线程来。标准库提供了 `thread::spawn` 作为创建线程的一种方式,而 `thread::spawn` 则期望得到一些线程在其一创建出来,就应立即运行的代码。然而,在咱们的示例中,咱们打算创建出这些线程,并让他们 *等待,wait* 咱们稍后将要发送的那些代码。标准库的线程实现,没有包含任何实现那样做法的方式;咱们必须亲自实现他。
|
||||
|
||||
咱们将通过引入介于 `ThreadPool` 与那些线程之间,将对这种新行为加以管理的一种新数据结构,来实现这样的行为。咱们将把这种数据结构称作 `Worker`,在线程池实现中,这是个常见的术语。`Worker` 会拾取需要运行的代码,并在该 `Worker` 的线程中运行那些代码。设想某家饭馆中工作的人们:工人们会一直等待,直到有顾客点的菜单进来,而随后他们就负责接下这些菜单,并让顾客们满意。
|
||||
|
||||
在线程池中存储的,不再是 `JoinHandle<()>` 实例的矢量值,咱们将存储这个 `Worker` 结构体的实例。每个 `Worker` 都将存储一个单独的 `JoinHandler<()>` 实例。随后咱们将在 `Worker` 上实现一个,将取得要运行代码的闭包,并将其发送到已经运行着的线程去执行的方法。咱们还将给到每个 `Worker` 一个 `id`,如此咱们就可以在日志记录或调试时,区分出线程池中那些不同的 `Worker`。
|
||||
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user