当前位置:  开发笔记 > 开发工具 > 正文

Win32线程调度

如何解决《Win32线程调度》经验,为你挑选了2个好方法。

据我所知,Windows线程调度程序不会区分属于两个不同进程的线程,前提是它们都具有相同的基本优先级.我的问题是,如果我有两个应用程序,一个只有一个线程,另一个说50个线程都具有相同的基本优先级,这是否意味着第二个进程比第一个进程享有更多的CPU时间?



1> aJ...:

Windows中的调度是线程粒度.这种方法背后的基本思想是流程不会运行,而只是提供资源和线程运行的上下文.回到你的问题,因为调度决策是严格按线程进行的,所以不考虑线程属于哪个进程.在您的示例中,如果进程A具有1个可运行的线程,并且进程B具有50个可运行的线程,并且所有51个线程具有相同的优先级,则每个线程将接收1/51的CPU时间 - Windows将不会提供50%的处理A的CPU和处理B的50%.要了解线程调度算法,必须首先了解Windows使用的优先级.您可以参考这里快速参考.

尝试阅读Windows Internals以深入了解.



2> ReinstateMon..:

以上所有内容都是准确的,但如果您担心50线程进程占用所有CPU,那么您可以采用一些技术来确保没有任何一个进程压倒CPU.

恕我直言,最好的方法是使用作业对象来管理进程的使用.首先调用CreateJobObject,然后调用SetInformationJobObject以限制作业对象中进程的最大CPU使用率,并使用AssignProcessToJobObject将具有50个线程的进程分配给作业对象.然后,您可以让操作系统确保50线程进程不会消耗太多CPU时间.

推荐阅读
保佑欣疼你的芯疼
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有