【发布时间】:2016-09-14 02:22:54
【问题描述】:
绿色线程是在 Erlang 中引入的,可能所有基于它的语言都知道它们,在 go (gorutines) 中也是如此。然后 afaik 他们被除锈了。
我的问题:
- 如何在 .NET 中实现绿色线程?是否有一些警告会阻止当前的 .NET 运行时实现它们?
- 它在性能方面是否有意义?我们有一个非常轻量级的任务,在(不久的)将来我们甚至会有 ValueType 任务(更适合某些场景)...
【问题讨论】:
-
Erlang 和 Go 不提供绿色线程。该术语被滥用太多而无用。 Fiber 在多核时代表现不佳,尝试将其添加到 NET 2.0 的尝试以失败告终。使用 AppDomain 获得 Erlang 和 Go 提供的那种状态隔离。从 Task 类和 async/await 关键字中获取轻量级线程。看看 Akka.NET
-
如果您使用对象池来管理任务并通过缓存提高性能,则不需要绿色线程。性能不佳通常是因为一切都是异步的。异步和同步与缓存的混合将为您提供更好的性能。如果绿色线程有什么大用处,我相信 .NET 开发人员早就考虑过。
-
@AkashKava 您可以从“异步执行所有操作”中获得相当不错的性能,尽管语言支持必须经过精心设计:joeduffyblog.com/2015/11/19/asynchronous-everything
标签: .net multithreading concurrency clr