Отключить многопоточность или ограничить использование ядра в F #? - PullRequest
2 голосов
/ 04 февраля 2009

Есть ли способ отключить многопоточность или ограничить количество ядер, используемых приложением F #? Я знаю, что это не будет сделано в производственной среде, но мне любопытно, нужно ли мне на самом деле устанавливать приложение в системе с одним ядром, чтобы посмотреть, как оно будет работать.

Ответы [ 3 ]

3 голосов
/ 04 февраля 2009

Вы можете просто установить это в начале вашего приложения, установив значение для ProcessorAffinity текущего процесса:

System.Diagnostics.Process.GetCurrentProcess().ProcessorAffinity <- nativeint 1

Это будет эффективно ограничивать ядра, используемые для процесса, первым процессором в системе.

2 голосов
/ 06 февраля 2009

Настройка реестра или использование Process.ProcessorAffinty напрямую изменяют планировщик процессов Windows. Это плохая практика, так как она зависит от платформы и, кроме того, может привести к программному поведению, которое трудно определить причину. Если возможно, гораздо лучше сделать это через саму .NET без использования оболочек PInvoke, таких как System.Diagnostics.Process.

Если вы хотите, чтобы ваше приложение использовало только один поток, я предлагаю настроить сборщик мусора не одновременно, добавив в свой файл app.config следующее:

<configuration>
   <runtime>
       <gcConcurrent enabled="false"/>
   </runtime>
</configuration>

Для получения дополнительной информации см. Мой пост на эту тему здесь .

Если вы хотите установить явные ограничения на верхнюю и нижнюю границы числа потоков, лучше всего использовать объект ThreadPool . Используя SetMaxThreads и SetMinThreads , вы можете безопасно применять эти ограничения, не касаясь системного планировщика Windows.

Единственным существенным ограничением использования ThreadPool является то, что при использовании этого метода вы не можете установить минимальное количество потоков, которое будет меньше числа процессоров на вашем компьютере.

0 голосов
/ 04 февраля 2009

Вы можете установить сходство процессов с помощью настройки реестра , что ограничит ваше приложение по желанию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...