Я новичок в многопоточности. У меня есть 4 логических процесса на моем компьютере, и я хочу запустить 4 равные задачи в потоках на 4 разных ядрах. Как мне это сделать? Я попытался использовать BackgroundWorker
, но 4 экземпляра BackgroundWorker заполняют только 2 ядра из 4 доступных. Мой пример кода с BackgroundWorker'S:Как разделить длинные задачи на разных ядрах?
BackgroundWorker worker = new BackgroundWorker();
worker.DoWork += new DoWorkEventHandler(worker_DoWork);
worker.RunWorkerAsync(calculationParams);
BackgroundWorker worker1 = new BackgroundWorker();
worker1.DoWork += new DoWorkEventHandler(worker_DoWork);
worker1.RunWorkerAsync(calculationParams1);
BackgroundWorker worker2 = new BackgroundWorker();
worker2.DoWork += new DoWorkEventHandler(worker_DoWork);
worker2.RunWorkerAsync(calculationParams2);
BackgroundWorker worker3 = new BackgroundWorker();
worker3.DoWork += new DoWorkEventHandler(worker_DoWork);
worker3.RunWorkerAsync(calculationParams3);
Почему важно, чтобы ваши функции запускались на разных ядрах? –
@ JensKloster имеет хорошую точку. Пусть .NET управляет оптимальным распределением потоков для вас. –
В одном из ответов Игоря говорится: 'TPL масштабирует степень параллелизма динамически, чтобы эффективно использовать все доступные ядра. Используя TPL, вы можете максимизировать производительность своего кода, сосредоточившись на работе, которую ваша программа предназначена для выполнения. –