2013-10-02 2 views
1

Я просто нахожу свой путь вокруг параллельного программирования на C# и понимал значение ядер и истинное параллельное программирование.Будет ли выполняться одна задача в C# параллельно в многоядерной системе?

Но у меня есть еще вопрос:

Say У меня есть давно запущенная задача значит ли, что это будет выполняться с использованием потоков из пула потоков и в разных ядрах для истинного параллельного программирования.

Или это зависит от фактического делегирования, переданного в задачу?

Надеюсь, мой вопрос ясен.

+0

Этот [ответ] (http://stackoverflow.com/a/18882300/1082327) может помочь – PoweredByOrange

+2

Если вы спрашиваете, будет ли задание * SINGLE * волшебным образом запускаться одновременно в разных ЦП: Нет. Если вы спрашивая о параллельной библиотеке .Net Task vs. .Net Пулы потоков: посмотрите на эту ссылку: [Должен ли я использовать ThreadPools или параллельную библиотеку задач для операций с привязкой к IO?] (http://stackoverflow.com/questions/5213695/should -i-использование-threadpools или-задача-параллельно-библиотека-для-IO переплете-операций) – paulsm4

ответ

2

Делегат сам по себе не имеет значения. Это вопрос TaskScheduler.

по умолчанию TaskScheduler будет запускать их через ThreadPool .., чтобы они работать синхронно, вы бы передать в TaskScheduler экземпляр, который в настоящее время используется .. такие как статический TaskScheduler.FromCurrentSynchronizationContext.

1

Для правильного параллельного программирования требуются несколько ядер, поскольку потоки должны выполняться на отдельных потоках, чтобы действительно работать параллельно. В одной базовой системе вы можете добиться только фальшивого параллелизма, поскольку разные протекторы должны совместно использовать ядро ​​через выделенные временные интервалы. Другие протечки ждут, пока текущий поток работает на одном ядре.

Смежные вопросы