windows - Windows 上的引脚处理器 CPU 隔离

标签 windows multithreading affinity isolation smp

在我主要工作的 linux 中,我们使用一种称为 CPU 隔离的技术,该技术有效地将进程锁定到处理器上,并防止处理器运行任何其他东西。我们的内核人员做了一些魔术来处理中断。

在 Windows 中,我发现最接近的东西是亲和性概念,它似乎将进程/线程绑定(bind)到处理器。但它不能保证处理器仅运行该进程/线程,这意味着仍然可能存在上下文切换和其他抖动。

有没有办法在 Windows 上隔离 CPU 以实现半确定性运行时间?

最佳答案

在用户模式下没有确切的方法。 Windows 主要试图防止应用程序占用所有系统资源。但是您可能会将大多数其他进程隔离到另一个核心/处理器,这样您的代码就可以在主要专用于它的核心上运行。

开始寻找 at this code here on MSDN关于枚举过程。除了您的枚举代码会将 PROCESS_SET_INFORMATION 指定为 OpenProcess 的标志外.您可能需要以管理员权限运行您的代码,以便为未作为您的 NT 信用运行的进程执行此操作。对于获得的每个进程句柄,调用 SetProcessAffinityMask将进程设置为在除一个内核之外的所有内核上运行。然后将您的进程设置为在您从所有其他进程句柄中剔除的保留核心上运行另一个进程。

这不会处理从启动和负载平衡到您尝试在其上运行代码的核心的其他进程。

您的里程可能会有所不同。如果这只是为了测试或专用于您的代码的机器,那么它可能没问题。如果这是针对旨在与所有其他应用程序一起运行的商业应用程序,那么客户在运行您的代码时看到所有其他应用程序和服务都将非常失望。小心行事。

关于windows - Windows 上的引脚处理器 CPU 隔离,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15324586/

相关文章:

windows - 批处理脚本 : to remove a specific/targeted words that include special characters from multiple filenames

C++如何确定互斥量是否被单个线程不成比例地占用而阻塞其他线程

java - 如何从控制台设置亲和性运行java

c++ - Linux - 确保专门为关键任务保留一个核心

c# - 进程无法访问文件 'CustomTabsClient_CustomTabsCallbackImpl.class'

驱动器号和冒号后没有斜杠的 Windows 路径 - 它指向什么?

Java ScheduleAtFixedDelay 停止

Android - 如何正确执行后台线程?

c++ - 为什么我在时间测量中会出现如此巨大的抖动?

windows - 命名管道 232 管道正在关闭