我对以下概念感到困扰: 大多数书籍/文档都描述了强大的服务器是如何实现多线程的,并且最常见的方法是启动一个新线程来为每个新客户端提供服务。例如。一个线程专用于每个新连接。但这实际上是如何在大型系统中实现的呢?如果我们有一个服务器接受100000个客户端的请求,它已经启动了100000个线程?这现实吗?服务器中可以运行多少个线程没有限制吗?另外上下文切换和同步的开销,它不会降低性能吗?它是作为队列和线程的混合实现的吗?这种情况下队列的数量是固定的吗?任何人都可以就此启发我,也许可以给我一个描述这些的很好的引用吗?
谢谢!
最佳答案
常用的方法是使用线程池。线程池是已创建线程的集合。当新请求到达服务器时,它会从池中分配一个备用线程。当请求被处理后,线程返回到池中。
池中的线程数根据应用程序的特性进行配置。例如,如果您有一个受 CPU 限制的应用程序,您将不需要太多线程,因为上下文切换会降低性能。另一方面,如果您有一个 DB 或 IO 绑定(bind)应用程序,您需要更多线程,因为很多时间都花在等待上。因此,更多线程将更好地利用 CPU。
谷歌“线程池”,您肯定会找到很多关于这个概念的资料。
关于java - 服务器和线程模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3543155/