From 15e051b68c3f69f1950de1b048dae90ccadc84ed Mon Sep 17 00:00:00 2001 From: "Peng Hailin," Date: Sun, 2 Apr 2023 14:30:56 +0800 Subject: [PATCH] Update Ch20 --- hello/src/main.rs | 4 +++- ...oject_Building_a_Multithreaded_Web_Server.md | 17 +++++++++++++++++ 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/hello/src/main.rs b/hello/src/main.rs index e134057..5087a91 100644 --- a/hello/src/main.rs +++ b/hello/src/main.rs @@ -13,7 +13,9 @@ fn main() { for stream in listener.incoming() { let stream = stream.unwrap(); - handle_conn(stream); + thread::spawn(|| { + handle_conn(stream); + }); } } diff --git a/src/Ch20_Final_Project_Building_a_Multithreaded_Web_Server.md b/src/Ch20_Final_Project_Building_a_Multithreaded_Web_Server.md index 82cfada..b6ea69f 100644 --- a/src/Ch20_Final_Project_Building_a_Multithreaded_Web_Server.md +++ b/src/Ch20_Final_Project_Building_a_Multithreaded_Web_Server.md @@ -547,5 +547,22 @@ fn handle_conn(mut stream: TcpStream) { **Spawning a Thread for Each Request** +首先,咱们来探讨一下若咱们的代码给每隔连接创建一个新线程,他看起来会怎样。正如早先所提到的,由于潜在地生成无限数目线程的那些问题,这样做不是咱们的最终计划,但其为首先得到一个运作多线程服务器的起点。随后咱们将添加线程池作为一项改进,且将这两种方案进行对比将更容易一些。下面清单 20-11 给出了把 `main` 构造为于那个 `for` 循环里,生成一个新线程来处理每个 TCP 流的一些修改。 +文件名:`src/main.rs` +```rust +fn main() { + let listener = TcpListener::bind("127.0.0.1:7878").unwrap(); + + for stream in listener.incoming() { + let stream = stream.unwrap(); + + thread::spawn(|| { + handle_conn(stream); + }); + } +} +``` + +*清单 20-11:为每个 TCP 流生成一个新线程*