From 79f483239b65502348f0bdbe2e4e56085d2c2dc7 Mon Sep 17 00:00:00 2001 From: "Peng Hailin," Date: Sun, 2 Apr 2023 13:11:24 +0800 Subject: [PATCH] Update Ch20 --- ..._Final_Project_Building_a_Multithreaded_Web_Server.md | 9 +++++++++ 1 file changed, 9 insertions(+) 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 049faef..82cfada 100644 --- a/src/Ch20_Final_Project_Building_a_Multithreaded_Web_Server.md +++ b/src/Ch20_Final_Project_Building_a_Multithreaded_Web_Server.md @@ -539,4 +539,13 @@ fn handle_conn(mut stream: TcpStream) { 这种技巧只是提供 web 服务器吞吐量的许多方法之一。咱们可能探讨的其他选项分别是 *分叉汇合模型,fork/join model*、*单线程异步 I/O 模型,single-threaded async I/O model*,抑或 *多线程异步 I/O 模型,multi-threaded async I/O model*。若对此问题感兴趣,那么可以阅读有关其他解决方案的资料,并尝试实现他们;对于 Rust 这种底层编程语言,所有这些选项都是可行的。 +在开始实现线程池前,咱们来聊聊用到这个池子的东西会是什么样子。在咱们正要尝试设计代码时,首先编写客户端界面,可有助于引导咱们的设计。要以咱们打算调用代码 API 的方式,编写出这些有组织架构的代码 API;随后在那种组织架构下实现功能,而非先实现功能而随后设计那些公开 API。 + +与第 12 章中项目里用到的测试驱动方式的开发,test-driven development,类似,这里咱们将运用编译器驱动的开发,compiler-driven development。咱们将先编写出咱们打算调用那些函数的代码,而随后会看看来自编译器的那些报错,以确定出接下来咱们应修改些什么,来让代码运作起来。在咱们进行那一步之前,咱们将探讨一下咱们并不会用到的一种技巧,作为开头。 + +#### 为每个请求生成一个线程 + +**Spawning a Thread for Each Request** + +