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
4908f3079c
commit
e334024f3e
@ -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 这种底层编程语言,所有这些选项都是可行的。
|
||||
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user