有没有办法在.NET中实现Erlang风格的轻量级过程?
我发现了一些实现Erlang消息传递模型(参与者模型)的项目。例如,轴。但是我没有发现任何关于轻量级进程实现的信息。我指的是在一个OS线程或OS进程的上下文中运行的多个进程。
发布于 2010-11-24 05:43:23
我想F# MailboxProcessor就是你要找的。使用MailboxProcessor,您可以在一个.NET进程中定义数万个代理,就像您可以在Erlang中生成数万个轻量级进程一样。
唐·西姆的“MSDN员额”是一个很好的介绍。
如果您是从Erlang背景来到.NET的,请记住,您将丢失许多OTP的好东西(主管、位置透明度、mnesia、.)。
发布于 2010-04-12 18:35:53
CLR可以托管,并公开主机实现自己的任务抽象的机制。理论上,它们可以是线程、光纤、LWPs -只要主机实现必要的 接口就可以了。
要做对的事有点困难。MS尝试了一下,以便在Server光纤模式下承载CLR。
在最后一刻,有一些压力缺陷,所以他们停止了插头根据乔·达菲和迪诺·维兰 (谁运行有关编写自定义CLR主机的系列文章,该主机在他的博客上实现了自己的任务抽象(使用光纤)。)。
现在还缺少一些管道-- ICLRTask::SwitchOut() --即使一个人绕过了它,在压力测试迭代中碰到MS的同样的bug也可能会困扰着冒险的灵魂。
假设有一段时间,所有的问题都以某种方式解决了,并且整个运行时都准备在光纤、LWP等上运行。仍然存在P/Invoke的问题,它可能会调用阻塞操作。没有内核支持,这种调度是很难做到的。
这在Windows7和Windows2008Server R2的64位版本中得到了解决。现在,如果调用阻塞在内核中,用户模式调度可以将控制权返回给用户模式(而不是内核模式)调度器。此外,这些用户模式调度线程是具有自己的TLS的真正线程。这些都是很大的改进,并使许多光纤模式头痛消失。
现在,利用UMS在并发运行时中是可供C++使用,是C运行时库的一部分。
后者意味着您可以在2010中开箱即用。
发布于 2010-04-13 06:52:17
你看过雷朗了吗?我只读到它,但我没有用它做任何事,但.
https://stackoverflow.com/questions/2620757
复制相似问题