.net NET的高级多线程/并发抽象

.net NET的高级多线程/并发抽象,.net,concurrency,functional-programming,.net,Concurrency,Functional Programming,我只是想知道为什么与Scala、F#或Haskell不同,基本的.NET框架(在C#或VB中提供)似乎对更高级别的并发模式几乎没有本机支持 有一些基本的机制可用——锁、监视器、线程池——但是关于它呢 同步变量() 同步通道 异步通道(请参见Go或) 参与者/消息传递() 未来 并行计算/列表函数 通过Linq的可组合异步计算(如F#) 甚至软件事务内存() 即使考虑到ParallelFX,这个列表也只涵盖了部分内容 是否有某些深层次的原因反对提供此类功能(而不是希望人们乱搞IAsyncRes

我只是想知道为什么与Scala、F#或Haskell不同,基本的.NET框架(在C#或VB中提供)似乎对更高级别的并发模式几乎没有本机支持

有一些基本的机制可用——锁、监视器、线程池——但是关于它呢

  • 同步变量()
  • 同步通道
  • 异步通道(请参见Go或)
  • 参与者/消息传递()
  • 未来
  • 并行计算/列表函数
  • 通过Linq的可组合异步计算(如F#)
甚至软件事务内存()

即使考虑到ParallelFX,这个列表也只涵盖了部分内容


是否有某些深层次的原因反对提供此类功能(而不是希望人们乱搞
IAsyncResult
)或者这是计划在未来集成的?

目前正在积极研究最佳和最有效的抽象,可以用来实现并行软件,而无需掌握细节。大多数开发人员要么没有时间,要么没有意愿将其技能发展到这一水平

鉴于此,BCL对新概念的进入有相当高的障碍,但这并不意味着它们不会发生。最近,在.NET4中,将引入。TPL的早期版本实际上已经被取代

通过研究语言,渠道/等领域也在进行积极的研究


很明显,我不是团队的一员,也不为微软工作,但我的理解是,在这一领域,人们有一种创新的愿望,超越了已经广泛存在的领域。

我同意格雷格·D的观点,有很多“东西”即将到来。使用新的.Net4框架和他们的Axum项目。我看到的所有这些方法的问题是,它们变得极其复杂,在分布式/并行/分布式计算领域的技能、知识和经验相当“有限”。我写这篇文章并不是为了冒犯任何人,但我认为大学和教育工作者必须更加关注这些话题。但是,我认为并希望MS通过实施这些想法、Axum、CCR&DSS、异步代理库等,以及我们不久将看到的多核/云计算机系统的总体趋势/需求,创造出主流意识:)

在您的列表中有大量的功能重叠。我甚至不想在一个环境中实现所有这些。首先,与您的示例语言不同。NET framework设计时只考虑了面向对象的范例,Scala是多范例,F#和Haskell是functional@SpaceghostAli-你怎么能说.NET只是为面向对象的范例而设计的,紧接着说F#(一种在其上运行的语言)是功能性的?另外,你是否忘记了Linq这样的东西,它的设计完全是为了允许函数式编程?@Greg Beech-如果你听Anders谈论为.Net设计Linq这样的东西的挑战,你就会明白我是怎么说的。F#团队还讨论了两个C9中的类似挑战vids@SpaceghostAli:如果.NET设计时只考虑OOP,那么它就不会有尾部调用、闭包和泛型。TPL是为了并行,而不是并发。这是正确的。Axum是并发性研究,其中的成功概念现在(显然)正在被应用到.Net 4.5中。现在,您可以看到并接触到Axum正在成为主流的部分,您是否仍然认为它们非常复杂(可能比使用支持它们的原语更复杂)?