Выполняется ли задача C# на одном ядре?
выполняется ли задача C# на одном ядре?
У меня есть проект, где мне нужно решить сколько заданий нужно создать. Мне нужно создать столько,сколько сможет компьютер. Это количество процессоров, ядер или логических процессоров, я путаются между тремя вариантами.
2 ответов
задача выполняется в отдельном потоке. ОС планирует потоки к ядрам. Ядра являются логической концепцией и отличаются от физических процессорных чипов.
создать Environment.ProcessorCount
задачи или лучше использовать одну из конструкций TPL более высокого уровня, таких как PLINQ или Parallel
.
Если вы используете библиотеку задач (PTL), вам не нужно беспокоиться об этом. Вы можете прочитать больше об этом здесь. В двух словах:
TPL динамически масштабирует степень параллелизма, чтобы наиболее эффективно использовать все доступные процессоры. Кроме того, TPL обрабатывает разделение работы...
мы создали оболочку вокруг задачи следующим образом:
public static class PeriodicTaskFactory
{
public static Task Start(Action action, int intervalInMilliseconds = -1, int delayInMilliseconds = 0, int duration = -1, int maxIterations = -1, bool synchronous = false, CancellationToken cancelToken = null, TaskCreationOptions periodicTaskCreationOptions = TaskCreationOptions.None);
}
и тогда мы называем это так. В этом случае только работа, которую мы хотим выполнить, вызывает один метод каждые 1 минуту с задержкой на 1 секунду в первом выполнении.
PeriodicTaskFactory.Start(() =>
{
CdClMappingLogic.Invoke();
}, 60000, 1000, -1, -1, true)