详解Windows Server 2008内核新变化
2008-08-21 12:36:42 来源:WEB开发网之前 Windows 版本中完成端口的缺陷在于:当 I/O 完成后,I/O 系统将让执行该 I/O 的线程立即执行一小段完成处理,而不考虑该线程当前正在执行的其他工作。如果还有其他线程处于活动状态,则常常会导致调度程序抢占活动线程,并上下文切换到另一个执行线程的情况。
通过将完成处理延迟到下一线程以等待与该 I/O 关联的完成端口,Windows Server 2008 避免了此类上下文切换。因此,即使还有另一线程正在等待完成端口,它仍会在执行其他代码之前先执行完成处理,而且调度程序不必切换到执行线程。这种最小化上下文切换的能力可显著地改善高负载服务器应用程序的可伸缩性。
线程池更加有效
利用多个 CPU 来写入应用程序非常困难,因此 Windows XP 引入了工作线程池,它是一种基础结构和相关 API,用于提取在多个 CPU 间执行小段工作的详细信息。 应用程序将工作项目指定给线程池 API,然后该 API 在它为系统中的每个 CPU 创建和管理的某个线程中执行这些工作项目。
线程池的目的是通过使用相同的线程连续执行多个工作项目来尽可能减少上下文切换。当某个线程因为忙于执行其他工作而无法达到此目的时,它将使用不同 CPU 上的另一线程来执行该工作项目。
Windows Server 2008 的线程池实现可间接地(受益于完成端口改进)和直接地(通过优化线程管理)更好利用 CPU,这样工作线程就能根据需要动态切换以便处理应用程序的负荷。并且,此基础结构的核心已转移到内核模式,从而最小化使用该 API 的应用程序所产生的系统调用数量。最后,新 API 使应用程序能够更轻松地执行某些操作,如在应用程序关闭期间中止已排队的工作单元。
NUMA 优化
Windows Server 2003 在线程调度程序和内存管理器中引入了 NUMA 优化,而 Windows Server 2008 在 I/O 管理器中添加了 NUMA 优化同时扩展了内存管理器的 NUMA 优化。
更多精彩
赞助商链接