2
0
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:
Unisko PENG 2023-03-31 14:42:31 +08:00
parent 4908f3079c
commit e334024f3e

View File

@ -534,4 +534,9 @@ fn handle_conn(mut stream: TcpStream) {
所谓 *线程池thread pool*,是指处于等待中,并准备好处理某项任务的一组生成的线程。在程序收到一项新任务时,他便指派线程池中的一个线程给该项任务,而那个线程就会处理这个任务。池中的剩余线程,则是可以处理任何的于这首个线程进行处理时,进来的那些任务的。在这首个线程完成其任务处理时,他就会回到空闲线程的线程池,准备处理某项新任务。线程池实现了连接的并发处理,从而提升咱们服务器的吞吐能力。
咱们将把池中线程数量先知道一个较小的数目以保护咱们免于拒绝服务攻击Denial of Service(DoS) attacks若咱们让咱们的程序在每个请求进入时创建一个新线程那么构造出一千万个请求到咱们的服务器的某人就能经由耗尽咱们服务器的全部资源而使得这些请求的处理陷入停滞而造成极大破坏。
这种技巧只是提供 web 服务器吞吐量的许多方法之一。咱们可能探讨的其他选项分别是 *分叉汇合模型fork/join model*、*单线程异步 I/O 模型single-threaded async I/O model*,抑或 *多线程异步 I/O 模型multi-threaded async I/O model*。若对此问题感兴趣,那么可以阅读有关其他解决方案的资料,并尝试实现他们;对于 Rust 这种底层编程语言,所有这些选项都是可行的。