.NET中的Erlang风格轻量级进程

ale*_*xey 6 .net c# concurrency erlang lightweight-processes

有没有办法在.NET中实现Erlang风格的轻量级进程?

我找到了一些实现Erlang消息传递模型(actor模型)的项目.例如,阿克苏姆.但我没有发现轻量级流程的实现.我指的是在单个OS线程或OS进程的上下文中运行的多个进程.

Bry*_*ter 10

我认为F#MailboxProcessor是您正在寻找的Alexey.使用MailboxProcessor,您可以在一个.NET进程中定义数万个代理,就像您可以在Erlang中生成数万个轻量级进程一样.

MSDN后由Don赛姆是一个伟大的介绍.

如果您从Erlang背景来到.NET,请记住,您将缺少许多OTP好东西(主管,位置透明度,mnesia ......).


And*_*ass 7

可以托管CLR并公开主机实现其自己的任务抽象的机制.从理论上讲,它们可以是线程,光纤,LWP - 只要主机实现必要的 接口.

做到这一点有点困难.为了在SQL Server光纤模式下托管CLR,MS抓住了机会.

在最后的时刻,有一些压力的错误,所以他们根据勒令其乔·达菲迪诺Vhieland(谁跑了一系列关于编写实现了自己的任务抽象的自定义CLR主机-用纤维-在他的博客) .
现在有一些管道缺失 - ICLRTask::SwitchOut()- 即使有人绕过它,在压力测试迭代中遇到MS的同样的错误也可能会困扰冒险的灵魂.

假设所有问题都以某种方式固定,并且整个运行时准备在光纤,LWP上运行,无论如何.仍然存在P/Invoke可能会调用阻塞操作的问题.没有内核支持,这种调度很难做到.

这在64位版本的Windows 7和Windows 2008 Server R2中得到了解决.现在存在用户模式调度,如果内核中的调用阻塞,则可以将控制权返回到用户模式 - 而不是内核模式 - 调度程序.此外,这些用户模式调度线程是具有自己的TLS的真实线程.这些都是很大的改进,并使许多纤维模式头痛消失.

目前,UMS用于可用于C++并发运行时,并且是C运行时库(CRT)的一部分.
后者意味着您可以使用Visual Studio 2010开箱即用.