我目前正在阅读Pro。 C#中的NET 4.0并行编程,但是每章的末尾没有练习。尽管我理解这个概念,但是我仍然感到缺乏一些实际做法。我需要一些实际的问题来巩固我所学到的东西。我通过互联网搜索,但大多数是教程...
是否存在仅针对TPL的问题集?我发现这个库在很多方面都着迷于我,我只是想获得它。因此,我想知道是否有人可以在TPL领域与我分享一些问题,以便我可以实践我的知识。您遇到的任何问题或参考将不胜感激。我只需要问题,我会自己找到解决方案。提前致谢。

最佳答案

我认为TPL就是关于可伸缩性的。如果以这种方式考虑,您将找到在代码中利用它的方法。如果不是并行完成-依次完成。在行动很少的小型应用程序中,顺序处理非常有用。但是,当您对特定流程有成千上万的请求时,这就是TPL的用武之地。

假设您要处理请求列表。在请求中是网站的网址。该过程是下载HTML内容并从页面中提取特定数据并将其存储在数据库中。通常,这必须按顺序进行。现在想象有10个人同时执行此请求。最后按下“提交”按钮的人必须等到所有其他人才能完成处理。这可能需要很长时间,并且会无限期递增。

视觉表现:

[Request01] - Finished
[Request02] - Started
[Request03] - Waiting
[Request04] - Waiting
[Request05] - Waiting
[Request06] - Waiting
[Request07] - Waiting
[Request08] - Waiting
[Request09] - Waiting
[Request10] - Waiting


使用TPL-您可以将这些请求存储在并发集合(TPL集合)中,并以并行方式遍历该集合。 TPL不仅将这些请求拆分为多个线程并同时运行它们,而且还在处理器上的每个内核上都这样做。

假设您有一台带有两个双核处理器的服务器;该过程将如下所示:

CPU1 Core1
  [Request01] - Finished
  [Request02] - Started
  [Request03] - Started

CPU1 Core2
  [Request04] - Finished
  [Request05] - Started
  [Request06] - Started

CPU2 Core1
  [Request07] - Finished
  [Request08] - Started
  [Request09] - Started

CPU2 Core2
  [Request10] - Finished


如您所见-这可以提高产量并减少等待时间。 TPL的好处-如果您可以开发完善的应用程序,则可伸缩性将从软件的后面放回到硬件上-很棒。您的受众越多地使用此服务,则可以添加的服务器越多。在IT世界中-这更容易接受。每个人都愿意扩大自己的硬件;没有人想要更新他们的软件。

我希望这可以帮助您指出正确的方向!

关于c# - 需要TPL库的典型问题是什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10764018/

10-10 13:04