c# - .Net 中可用的并行技术

标签 c# .net f# parallel-processing

我是 .Net 平台的新手。我搜索了一下,发现在 .Net 中有几种方法可以进行并行计算:

  1. 任务并行库中的并行任务,即 .Net 3.5。

  2. PLINQ、.Net 4.0

  3. 异步编程,.Net 2.0,(异步主要用于执行 I/O 繁重的任务,F# 具有支持此功能的简洁语法)。我列出这个是因为在 Mono 中,似乎没有 TPL 或 PLINQ。因此,如果我需要编写跨平台并行程序,我可以使用异步。

  4. .Net 线程。没有版本限制。

您能否就这些给出一些简短的评论或在此列表中添加更多方法?

最佳答案

您确实需要进行大量研究才能确定如何有效地使用多线程。有一些不错technical articles , 的一部分 Microsoft Parallel Computing team's site .

在我的脑海中,有几种方法可以实现多线程:

  1. Thread 类。
  2. ThreadPool,它还支持 I/O 绑定(bind)操作和 I/O 完成端口。
  3. Begin*/End* 异步操作。
  4. 基于事件的异步编程(或“EBAP”)组件,使用 SynchronizationContext
  5. BackgroundWorker,它是一个定义异步操作的 EBAP。
  6. Task .NET 4 中的类(任务并行库)。
  7. 并行 LINQ。有一个good article关于 Parallel.ForEach(任务并行库)与 PLINQ。
  8. Rx或“LINQ to Events”,它还没有非 Beta 版本,但已接近完成并且看起来很有希望。
  9. (仅限 F#)异步工作流。

更新:有一篇文章Understanding and Applying Parallel Patterns with the .NET Framework 4可供下载,它给出了关于哪些解决方案用于哪些类型的并行场景的一些方向(尽管它假设 .NET 4 并且不涵盖 Rx)。

关于c# - .Net 中可用的并行技术,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2883632/

相关文章:

.net - 在 Inno Setup 中检查给定服务的依赖服务

loops - 使用 for 循环将元素添加到 F# 中的 Map

C#:如何在 F# 中将扩展方法定义为 "with"?

c# - 将许多变量从 Unity 发送到 Arduino

c# - 如何在身份服务器 4 的客户端获得额外的声明?

c# - 配置系统无法从 c# com dll 初始化

c# - 找不到类型或命名空间名称 TSocket apache thrift C# Visual Studio 2019

c# - Reactive Extensions 中的 SequenceEqual 如何工作

c++ - F# 代码优化还是真的那么慢?

c# - 如何使用数据表绑定(bind)修改数据 GridView 列