我试图了解操作系统如何处理不同模型中的上下文切换,以更好地理解为什么 NIO 性能在请求数量达到较大峰值的情况下会更好。除了线程数量可能有限制之外,我很好奇在大量请求中执行的阻塞操作如何影响资源利用率。
在每个线程一个请求的模型中,比如基于 servlet 2.5 的 Web 应用程序,如果 499 个线程正在等待数据库 IO 并且只有一个线程需要工作,操作系统上下文是否会在所有这 500 个线程之间切换,试图找到需要工作的线程? 为了执行上下文切换,操作系统必须存储当前线程的状态,并恢复下一个线程的状态。这样做之后,操作系统会发现它不需要任何 CPU 时间,并且会保持上下文切换,直到找到需要工作的线程。另外,这在服务器利用率方面是什么样的?CPU 是否低,因为它主要受交换上下文的 IO 成本的约束,而不是实际计算任何东西?
提前感谢您的帮助。如果你能指出书籍、教科书等的方向,我也会非常感激。