我在试图理解操作系统如何处理不同模型中的上下文切换,以便更好地理解为什么NIO性能在请求数量大峰值的情况下更好。除了线程数可能有限的事实之外,我很好奇在这些大量请求中阻塞操作是如何影响资源利用率的。睡眠/等待线程中的上下文切换
在每个线程模型的一个请求中,比如说一个基于servlet 2.5的web应用程序,如果有499个线程正在等待数据库IO并且只有一个线程需要工作,那么所有这500个线程之间的OS上下文切换试图找到一个需要工作?要执行上下文切换,操作系统必须存储当前线程的状态,并恢复下一个线程的状态。这样做后,操作系统会发现它不需要任何CPU时间,并且会保持上下文切换,直到找到需要工作的线程。 此外,在服务器利用率方面,这看起来如何? CPU是低的,因为它大部分只是交换上下文的IO成本而不是实际计算任何东西?
在此先感谢您的帮助。如果你能指向我的书籍,教科书等方向,我也会非常感激。
核心上的CPU执行是由OS管理的资源之一。操作系统内核状态机已经知道哪些线程需要该资源,哪些线程不需要。如果一个线程请求I/O,并且请求不能立即得到满足,那么操作系统知道该线程不需要CPU资源,直到I/O请求得到满足,所以它不会给线程任何执行,直到它。杰里米的回答更详细。 – 2015-02-09 09:45:04