C# 中的处理器、内核和各种其他功能
本文关键字:其他 功能 内核 处理器 | 更新日期: 2023-09-27 18:34:35
我正在编写一个相当资源密集型的应用程序,我正在尝试找到一种方法让所述应用程序的用户决定应用程序应该使用哪些资源。
这里的部分问题是知道CPU能够做什么 ->我想,如果用户希望应用程序在AMD Phenom II X6上使用5个内核,我可以侥幸将所有内容扔在这5个内核上。另一方面,如果处理器是英特尔i7或AMD FX-8510,则其中一些内核共享各种组件。那么我应该怎么做,以确保我不会意外地将某些事情调度到超线程调度程序,或者达到这种程度的东西?
我试图避免 CPU 窒息的情况,因为我将所有内容都扔到了它的错误部分(这是一个老问题(。有什么想法吗?
操作系统中的线程调度程序具有所有必要的信息(物理 CPU 内核的数量、哪些逻辑内核共享资源、哪些内核停放到安全能源、是否启用了超线程、哪些内核使用 turbo 频率、其他程序使用哪些资源等(以实现高效的 CPU 资源分配。您的程序对这些事情一无所知,因此您可以做的最好的事情是让操作系统决定如何分配资源。即使程序中没有任何特殊支持,用户也可以根据需要通过设置进程优先级或处理器关联来限制程序使用的资源。
您可以尝试的一件事是根据 CPU 内核数创建线程数(由 Environment.ProcessorCount 返回(。如果您认为为每个物理内核调度一个线程(而不是每个逻辑内核一个线程(会表现得更好,则可以使用 Process.GetCurrentProcess((。ProcessorAffinity 属性 - 将其设置为在具有超线程的 CPU 上0x55555555,但这也会使事情变得比以前更糟(如果将来的某个 CPU 每个物理内核有 3 个逻辑内核而不是 2 个,或者如果另一个程序将处理器关联设置为相同的内核怎么办?