问题标签 [task-parallel-library]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
2941 浏览

c# - 多线程 Windows 服务的线程库

我正在寻找一个好的库,最好是在 C# 中,我可以在 Windows 服务中使用它,它将处理所需的所有多线程功能。

该服务将每 x 分钟运行一次,检查数据库中要调用的进程,并为每个进程生成一个线程并运行它。

每个线程都应该处理异常、日志记录等。

有什么建议么?

0 投票
3 回答
1463 浏览

php - 使用 eval() 的基本 PHP 模板的错误

我快要哭了。我已经阅读了 php.net 手册页,用各种短语尝试了十几个 Google 搜索,并扫描了数百个 stackoverflow 线程。我已经看到使用这种方法,但它对我不起作用。看起来很基础。我有几个相关的问题或我不知道如何找到答案的问题。

PHP 文件的重要部分如下所示:

我的 index.tpl 文件包括这样的行:

<title>{$tpl['title']}</title>
<meta name="description" content="{$tpl['description']}" />
nav, etc…<br> <div id="main-content"> {$tpl['page-content']} </div>

我喜欢代码的整洁和干净,没有一大堆额外<?=…?>的 's。

首先,当大括号 {} 出现在字符串中时,它叫什么?如果我知道的话,我也许可以查一下并学习如何使用它们。

接下来,这根本行不通。如果我从变量键中删除单引号,这很好,但 php.net 说你永远不应该这样做,以防我的名字在某个时候成为语言常量。很公平。但是我该如何解决这个问题?如果我想构建一个 evalTemplate 子例程并且可以将 $tpl 传递给它,我喜欢为 vars 使用一个数组。

最后, $tpl['page-content'] 不会打印出来。变量设置好了;我可以echo $tpl['page-content']用来测试,但它在最终的 HTML 中显示为一个空行。

我确信语言的某些方面我还不知道。任何帮助深表感谢!!

0 投票
2 回答
8260 浏览

system.reactive - Reactive Framework、PLINQ、TPL 和并行扩展如何相互关联?

至少自 .NET 4.0 发布以来,微软似乎在支持并行和异步编程方面付出了很多努力,并且似乎出现了很多围绕此的 API 和库。尤其是最近到处都经常提到以下花哨的名字:

  • 反应式框架,
  • PLINQ(并行 LINQ),
  • TPL(任务并行库)和
  • 并行扩展。

现在它们似乎都是 Microsoft 产品,而且它们似乎都针对 .NET 的异步或并行编程场景。但目前尚不清楚它们中的每一个究竟是什么以及它们之间的关系。有些可能实际上是同一回事。

简而言之,任何人都可以直接说明什么是什么?

0 投票
5 回答
842 浏览

c# - 现在开始为任务并行库设计是否为时过早?

自从 Microsoft 首次宣布 .NET 任务并行库 (TPL) 以来,我一直非常感兴趣地关注它的开发。

毫无疑问,我们最终会利用 TPL。我要质疑的是,当 Visual Studio 2010 和 .NET 4.0 发布时开始利用 TPL 是否有意义,或者等待一段时间是否有意义。

为什么现在开始?

  • .NET 4.0 任务并行库似乎设计得很好,一些相对简单的测试表明它在当今的多核 CPU 上运行良好。
  • 自从大约七年前购买我的第一个四核处理器 Dell Poweredge 6400 以来,我一直对使用多个轻量级线程来加速我们的软件的潜在优势非常感兴趣。当时的实验表明,这样做不值得,我将其主要归因于在每个 CPU 的缓存(当时没有共享缓存)和 RAM 之间移动数据的开销。
  • 竞争优势——我们的一些客户永远无法获得足够的性能,毫无疑问,我们今天可以使用 TPL 构建更快的产品。
  • 听起来很有趣。是的,我意识到有些开发人员宁愿用锋利的棍子戳自己的眼睛,但我们真的很喜欢最大化性能。

为什么要等?

  • 随着多核支持的成熟,今天的 Intel Nehalem CPU 是否代表了我们的发展方向?您现在可以购买具有 4 个内核且共享一个 3 级缓存的 Nehalem CPU,并且很可能在 Visual Studio 2010 / .NET 4.0 发布时共享一个 3 级缓存的 6 核 CPU。显然,内核数量会随着时间的推移而增加,但架构呢?随着核心数量的增加,它们还会共享缓存吗?Nehalem 的一个问题是,即使内核之间的互连速度非常快,它们的内存访问 (NUMA) 也不一致,这会导致性能下降和结果的可预测性降低。未来的多核架构能否取消 NUMA?
  • 同样,.NET 任务并行库是否会随着成熟而改变,需要修改代码才能充分利用它?

限制

  • 我们的核心引擎是 100% C# 并且必须在没有完全信任的情况下运行,因此我们仅限于使用 .NET API。
0 投票
1 回答
4450 浏览

.net-4.0 - Parallel.ForEach 是否需要 AsParallel()

ParallelEnumerable有一个静态成员AsParallel。如果我有一个IEnumerable<T>并且想要使用Parallel.ForEach,这是否意味着我应该一直使用AsParallel

例如,这两个都正确吗(其他一切都相同)?

没有AsParallel

或与AsParallel

0 投票
4 回答
6514 浏览

c# - 如何(以及是否)使用 TPL 编写单消费者队列?

我最近听到了很多关于 .NET 4.0 中的 TPL 的播客。它们中的大多数描述了诸如下载图像或进行计算之类的后台活动,使用任务以使工作不会干扰 GUI 线程。

我处理的大多数代码都具有多生产者/单一消费者的风格,其中来自多个来源的工作项必须排队,然后按顺序处理。一个示例是日志记录,其中来自多个线程的日志行被顺序排列到单个队列中,以最终写入文件或数据库。来自任何单一来源的所有记录都必须保持有序,并且来自同一时刻的记录在最终输出中应该彼此“接近”。

所以多个线程或任务或任何都在调用队列器:

一个专用的工作线程处理队列:

将工作线程专用于这些任务的消费者端似乎总是合理的。我应该改用 TPL 中的一些构造来编写未来的程序吗?哪一个?为什么?

0 投票
5 回答
12354 浏览

c# - TPL 与反应式框架

什么时候会选择使用 Rx 而不是 TPL,或者这两个框架是正交的?

据我了解,Rx 主要旨在提供对事件的抽象并允许组合,但它也允许提供对异步操作的抽象。通过处理返回的 IDisposable 使用 Createxx 重载和 Fromxxx 重载和取消。

TPL 还通过任务和取消功能为操作提供了抽象。

我的困境是什么时候使用哪个以及在什么场景下使用?

0 投票
1 回答
1256 浏览

c# - MSDN 处理 TPL 异常的示例 - 这是竞争条件吗?

我正在查看来自 MSDN @ 的 TPL 异常处理示例

http://msdn.microsoft.com/en-us/library/dd537614(v=VS.100).aspx

代码的基本形式是:

我的问题是:这是竞争条件吗?如果 task1 在 try 执行之前抛出会发生什么?我是否错过了阻止这场比赛的东西?

不应该这样写吗:

0 投票
3 回答
5327 浏览

.net - 在 .NET 4 TPL 中杀死一个死锁的任务

我想开始使用Task Parallel Library,因为这是推荐的用于执行异步操作的框架。我无法找到的一件事是任何强制中止的方法,例如 Thread.Abort 提供的。

我特别担心的是我安排了运行我不希望完全信任的代码的任务。特别是,我不能确定这个不受信任的代码不会死锁,因此我不能确定我使用这个代码安排的任务是否会完成。我想远离真正的 AppDomain 隔离(由于编组的开销和复杂性),但我也不想让 Task 线程悬而未决,陷入僵局。有没有办法在 TPL 中做到这一点?

0 投票
3 回答
16073 浏览

.net - 使用任务并行库时如何处理所有未处理的异常?

我在 .NET 4.0 中使用 TPL(任务并行库)。我想通过使用Thread.GetDomain().UnhandledException事件来集中所有未处理异常的处理逻辑。但是,在我的应用程序中,从不会为以 TPL 代码启动的线程触发该事件,例如Task.Factory.StartNew(...). 如果我使用类似new Thread(threadStart).Start().

这篇 MSDN 文章建议在使用 TPL 时使用 Task.Wait() 来捕捉AggregateException,但这不是我想要的,因为这种机制不够“集中”。

有没有人遇到过同样的问题,还是只有我一个人?你有什么解决办法吗?