在学校最近的一门有关网络/操作系统的类(class)中,我了解了线程池。现在,他的基本功能非常简单,我明白这一点。

但是,我在书中未指定的是线程池用尽时会发生什么?例如,您有一个包含20个线程的池,并且您有20个连接的客户端。另一个客户端尝试连接,但是池中没有线程,那又会怎样呢?客户端会排队吗?系统是否将另一个线程放入池中?还有别的吗

最佳答案

答案很大程度上取决于您的语言,操作系统和池实现。



通常在服务器情况下,它取决于套接字设置。套接字连接被操作系统排队,或者连接被拒绝。这通常不由线程池处理。在〜unix操作系统中,此队列或“积压”由 listen method处理。



这取决于线程池。一些池是固定大小的,因此不会添加更多线程。其他线程池是“缓存的”线程池,因此它将重用一个空闲线程,或者在没有可用线程时创建一个新线程。许多Web服务器的池上都有最大线程设置,因此远程用户不会通过启动太多并发连接来破坏系统。

10-08 19:03