有没有办法关闭多线程或限制F#app使用的内核数量?我知道这不会在生产环境中完成,但我很好奇我是否必须在单个核心系统上实际安装应用程序才能看到它将如何执行。
答案 0 :(得分:3)
您可以通过设置当前进程的ProcessorAffinity的值,在应用程序的开头设置它:
System.Diagnostics.Process.GetCurrentProcess().ProcessorAffinity <- nativeint 1
这将有效地将用于进程的核心限制到系统上的第一个CPU。
答案 1 :(得分:2)
调整寄存器或使用Process.ProcessorAffinty直接修改windows进程调度程序。这是一种不好的做法,因为它依赖于平台,并且还可能产生难以确定原因的程序行为。如果可能的话,最好不要使用像System.Diagnostics.Process这样的PInvoke包装器,通过.NET本身做到这一点。
如果您只希望您的应用程序使用单个线程,我建议您通过在app.config中添加以下内容来将垃圾收集器设置为非并发:
<configuration>
<runtime>
<gcConcurrent enabled="false"/>
</runtime>
</configuration>
有关详细信息,请参阅有关此主题的帖子here。
如果要对线程数的上限和下限设置显式限制,最好使用ThreadPool对象。通过使用SetMaxThreads和SetMinThreads,您可以安全地强制执行这些限制,而无需触及Windows系统调度程序。
使用ThreadPool的唯一重要限制是,在使用此方法时,您无法将最小线程数设置为小于计算机中处理器的数量。
答案 2 :(得分:0)
您可以通过tweaking the registry设置流程相关性,这会根据需要限制您的应用。