Что такого замечательного в TPL? - PullRequest
2 голосов
/ 12 марта 2011

Я сделал этот POC и убедился, что когда вы создаете 4 потока и запускаете их на четырехъядерном компьютере, все ядра заняты - так, CLR уже эффективно планирует потоки на разных ядрах, так почему класс TASK?

Согласен Задача упрощает создание и использование потоков, но кроме этого что?Это просто обертка вокруг нитей и пул потоков, верно?Или это каким-то образом помогает планировать потоки на многоядерных машинах?

Я специально смотрю на то, что с Task WR многоядерным, которого не было в потоках 2.0.

Ответы [ 3 ]

2 голосов
/ 12 марта 2011

«Согласен, задача упрощает создание и использование потоков»

Разве этого недостаточно?Разве это невероятно , что он обеспечивает строительные блоки более высокого уровня, чтобы мы, простые смертные, могли создавать многопоточный код без блокировок, который безопасен, потому что действительно умных людей, таких как Джо Даффи, сделалиработать для нас?

Если бы TPL на самом деле состоял только из способа запуска новой задачи, то это было бы бесполезно - кража работы и т. д. это хорошо, но, вероятно, не имеет решающего значения для большинства из нас.Именно строительные блоки вокруг задач - и в частности вокруг идеи "будущего" - обеспечивают ценность.Вы действительно хотите написать Parallel.ForEach самостоятельно?Хотите узнать, как эффективно выполнять разбиение?Я знаю, что если бы I попытался бы это сделать, это заняло бы у меня много времени, и я, безусловно, справился бы с этим хуже, чем команда PFX.

Многие из достижений в разработкераньше мы не делали возможным сделать что-то, что было невозможно раньше, - они поднимали уровень абстракции, чтобы проблему можно было решить один раз , а затем это решение использовать повторно.Вы чувствуете то же самое в отношении самого CLR?Очевидно, вы могли бы сделать то же самое в сборке самостоятельно, но ... подняв уровень абстракции, CLR и C # сделают нас более продуктивными.

1 голос
/ 12 марта 2011

Хотя вы можете делать все эквивалентно в TPL или пуле потоков, для лучшей абстракции и шаблонов масштабируемости TPL предпочтительнее, чем Threadpool. Но дело за программистом, и если вы точно знаете, что делаете, и на основе ваших требований к планированию и синхронизации выполняются в вашем конкретном приложении, вы можете использовать Threadpool более эффективно. Есть некоторые вещи, которые вы получаете бесплатно с TPL, которые вы должны кодировать при использовании Threadpool, как, например, следующие немногие, о которых я могу думать сейчас.

0 голосов
/ 12 марта 2011

TPL позволяет вам программировать с точки зрения задач, а не потоков. Думать о задачах исключительно как о лучшей абстракции потока было бы ошибкой. Задачи позволяют вам указать, какую работу вы хотите выполнить, а не то, как вы хотите, чтобы она была выполнена (потоки). Это позволяет вам выразить потенциальный параллелизм вашего приложения, а среда выполнения TPL - планировщик и пул потоков - управляет выполнением этой работы. Это означает, что TPL возьмет на себя большую часть бремени, связанного с тем, что ваше приложение будет обеспечивать наилучшую производительность на широком спектре аппаратного обеспечения с различным количеством ядер.

Например, TPL позволяет легко реализовать ключевые шаблоны проектирования, которые позволяют вам выразить потенциальный параллелизм вашего приложения.

http://msdn.microsoft.com/en-us/library/ff963553.aspx

Как фьючерсы (упомянутые Джоном), а также конвейеры и параллельные циклы.

...