问题标签 [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 投票
5 回答
2595 浏览

.net - .net 中的无锁结构

我是 .net 的新手,想知道 .net 是否具有 Java 等效的 AtomicInteger、ConcurrentLinkedQueue 等?

我做了一些搜索,但什么也想不出来。

无锁算法需要某种 CAS 指令,它是通过 Java 中未记录的 Unsafe 类提供的,.net 有什么等价的吗?

0 投票
2 回答
4410 浏览

.net - 微软的 CCR 与任务并行库

Microsoft 至少有两种不同的方法来改进对并发操作的支持。

1) 是并发协调运行时 (CCR),它是 Microsoft Robotics Studio 和CCR & DSS Toolkit的一部分

2) 任务并行库 ( TPL )(.NET 4.0 的一部分,现在处于 Beta 1 版本中)

我想知道是否有人对这两种不同的软件有经验并会比较和对比它们?

0 投票
2 回答
312 浏览

.net-4.0 - 执行和生成子任务时结果不一致

我有一些简单的代码,其中主线程正在创建一个新任务。该任务又会产生多个子任务。主线程对父任务执行“等待”。我观察到在程序的多次运行中我没有得到相同的输出。在下面的代码中,我打印出每个任务中迭代变量的值,但在不同的运行中,只有子集被打印出来。我知道执行没有顺序,但它仍然必须完成,因为我希望打印出 100 个数字(没有特定顺序)。调用 Wait 不会等待所有子任务完成吗?我正在运行 VS2010 Team 系统 Beta1

0 投票
5 回答
8765 浏览

c# - 支持 .NET 4.0“任务并行库”中的进度报告和增量结果

我知道Task Parallel Library仍处于 Beta 阶段,可用资源可能较少,但无论我读过什么,库对任务调度异常处理取消都给予了非常特殊的处理。

但我没有找到任何关于进度报告发送任务增量结果的参考。这两件事似乎太重要了,不容忽视。您能否介绍一下如何在任务并行库中处理这些问题或参考一些解释它们的文章?

0 投票
3 回答
1319 浏览

.net-4.0 - 有没有办法告诉任务并行库中当前正在运行哪些任务?

我看不到查看哪些任务正在运行的方法。有 Task.Current 属性,但是如果有多个任务正在运行怎么办?有没有办法获得这种信息?

或者,是否有内置方法可以在任务开始或完成时获得通知?

0 投票
2 回答
2214 浏览

html - smarty中的*.tpl和*.html有什么区别?

我没有找到关于这个的文件。

0 投票
4 回答
8171 浏览

c# - 在 Parallel.ForEach 中使用哈希表?

我有一个 Parallel.ForEach 循环在体内运行密集操作。

该操作可以使用 Hashtable 来存储值,并且可以重复用于其他连续的循环项。我在密集操作完成后添加到Hashtable中,下一个循环项可以在Hashtable中查找并​​重用对象,而不是再次运行密集操作。

但是,因为我使用的是 Parallel.ForEach,所以存在一个不安全的问题,导致 Hashtable.Add 和 ContainsKey(key) 调用不同步,因为它们可能并行运行。引入锁可能会导致性能问题。

这是示例代码:

TPL 库中必须有一些 API,属性设置,可以处理这种情况。有没有?

0 投票
3 回答
363 浏览

c# - 如何批量远程调用数据库或服务?

希望你们中的一些人可以就这一点给出一些指示。

我生成代码,我必须调用远程资源,如 web 服务或数据库。

考虑这段代码

对于 50 个孩子,它将调用 50 次服务,占用 50 倍的开销。在我现实生活中的例子中,这很容易是一百万个调用,使整个事情变得爬行。

我想做的是以某种对调用线程/任务透明的方式批处理这些调用。因此,它不是直接调用服务,而是调用一些对这些调用进行批处理的中央队列(“火车站”)。

因此,当它这样做时,调用任务会阻塞。然后队列等待 X 调用累积,然后使用请求列表对远程服务进行 1 次调用。

当结果出现时,该队列将返回值返回给正确的任务并解除阻塞。对于调用线程,所有这些都保持隐藏,看起来就像另一个函数调用。

这可以做到吗?TPL 中是否有原语可以让我这样做?

它有点像 CCR 的气味,有很多事情在同时进行,等待其他事情完成。

我当然可以重写此代码以在 Parent 类上创建请求列表,然后调用该服务。问题是我的真正问题是生成了所有这些代码。因此,我必须“深入了解” Child.RemoteCall 的实现,这使得这一切变得比现在复杂得多。此外,孩子可能是远程对象等的代理。如果可行的话,这将非常困难,我宁愿隔离这种复杂性。

希望这对某人有意义,如果不让我知道,我会详细说明。

0 投票
2 回答
7187 浏览

f# - 任务并行库与异步工作流

我有一些用 c# 编写的执行并发代码的东西,大量使用了任务并行库(任务和未来延续链)。

我现在将其移植到 F# 并试图找出使用 F# 异步工作流与 TPL 中的构造的优缺点。我倾向于 TPL,但我认为这两种方式都可以。

有没有人有关于在 F# 中编写并发程序的技巧和智慧来分享?

0 投票
4 回答
8145 浏览

.net - Parallel.Foreach 产生太多线程

问题

尽管我将在这里讨论的代码是用 F# 编写的,但它是基于 .NET 4 框架的,并不具体取决于 F# 的任何特殊性(至少看起来如此!)。

我的磁盘上有一些数据,我应该从网络更新,将最新版本保存到磁盘:

问题是对于loadAndSaveAndUpdate我的所有数据,我必须多次执行该函数

每一步都会做

  • 一些磁盘 IO,
  • 一些数据处理,
  • 一些网络 IO(可能有很多延迟),
  • 更多的数据处理,
  • 和一些磁盘 IO。

在某种程度上并行完成这不是很好吗?不幸的是,我的阅读和解析功能都不是“异步工作流就绪”。

我想出的第一个(不是很好)解决方案

任务

我做的第一件事是设置一个Task[]并启动它们:

然后我按 CTRL+ESC 只是为了查看它使用了多少线程。15, 17, ..., 35, ..., 170, ... 直到杀死应用程序!出了点问题。

平行线

我做了几乎同样的事情,但使用Parallel.ForEach(...)和结果是一样的:很多很多很多线程。

一个有效的解决方案……有点

然后我决定只启动n线程,Task.WaitAll(of them)然后是其他n,直到没有更多可用的任务。

这是可行的,但问题是当它完成处理n-1任务时,它会等待,等待,等待最后一个由于大量网络延迟而坚持阻塞的任务。不是很好!

那么,你将如何解决这个问题呢?我很乐意查看不同的解决方案,包括异步工作流(以及在这种情况下如何调整我的非异步函数)、并行扩展、奇怪的并行模式等。

谢谢。