Использование процессорного ядра с многопоточностью с потребителем производителя на платформе .net - PullRequest
2 голосов
/ 08 марта 2012

Итак, у меня есть параллельная очередь и 2 потока. У меня есть 1 поток, который проходит данные и очереди. У меня есть другой поток, который исключает информацию из очереди и в результате выполняет некоторые действия.

Возможно ли, что эти два потока работают [очевидно, никто не может гарантировать, что и где будет работать] на отдельных ядрах? Я использую asp.net [MVC] 4.0, я не нахожусь в настройке веб-сада, поэтому мне интересно, если это все ограничено 1 ядром, как рабочий процесс. Идея в том, что у меня многоядерная система, и я хотел бы использовать это. Я бы использовал веб-сад, но моя очередь находится в статическом классе, и я думаю, что он не будет разделен между рабочими процессами в веб-саду.

Я также рассматривал возможность создания Parallel.ForEach в одном из потоков, поскольку, возможно, ему придется выполнять до 240 операций, которые могут работать параллельно. Опять же, будет ли это связано с ядром рабочего процесса, будет ли оно работать на других доступных ядрах?

Заранее спасибо

1 Ответ

0 голосов
/ 08 марта 2012

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

Как говорится, есть ли причина, по которой вы не можете просто позволить TPL выполнить свою работу? Ваш вопрос ускользает от этого, но он настроен для выполнения такой работы и выполняет довольно хорошую работу прямо из коробки (например, ваш Parallel.ForEach). У вас есть некоторый контроль над гранулярностью с MaxDegreesOfParallelism, который ограничивает количество одновременных операций этим конкретным экземпляром.

Вдобавок ко всему, вы только что решили запустить его, чтобы увидеть, является ли это реальной проблемой?

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