Я использую Parallel.ForEach, и я делаю некоторые обновления баз данных, теперь без установки MaxDegreeOfParallelism, двухъядерный процессор обрабатывает тайм-ауты sql-клиента, где, кроме того, процессор с четырёхъядерным процессором как-то не отключается.Что делает MaxDegreeOfParallelism?
Теперь у меня нет контроля над тем, какие процессорные ядра доступны, где мой код работает, но есть ли какие-то настройки, которые я могу изменить с помощью MaxDegreeOfParallelism, которые, вероятно, будут работать меньше операций одновременно и не будут приводить к таймаутам?
Я могу увеличить время ожидания, но это нехорошее решение, если на более низком процессоре я могу обрабатывать меньше операций одновременно, что уменьшит нагрузку на процессор.
Хорошо, я также прочитал все другие сообщения и MSDN, но установит MaxDegreeOfParallelism, чтобы снизить значение, из-за чего пострадали мои четырехъядерные процессоры?
Например, есть ли что-то вроде, если у процессора есть два ядра, а затем использовать 20, если у процессора четыре ядра, а затем 40?
У моей логики нет ожиданий или ввода-вывода, она просто обновляет SQL, да SQL может иметь свои собственные, но в основном я жду завершения SQL. Каков максимальный ток по умолчанию для активных потоков? –
По умолчанию 2 на ядро, но TPL может повысить это, если ваш код не использует CPU. В большинстве баз данных имеется некоторое количество ввода-вывода. –
Если моя 6-ядерная машина сильно загружена, она использует только 1 или 2 потока. Если он слегка загружен, он доходит до 12. Его достаточно интеллектуальный, чтобы учитывать существующую системную нагрузку. – Contango