Выполняется ли задача 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)