.net/c#的actor并发模型有没有很好的实现?
我必须优化ac#例程,我认为演员模型非常适合作为我的问题的解决方案.不幸的是,我只有scala实现经验.
我正在努力寻找任何适当的链接来设计模式,最佳实践或良好的基本架构原则,这些原则应该用于构建基于Actor的应用程序.我知道的那几个是:
向Actors发送消息时感叹号(!)和问号(?)之间有什么区别?
myActor ! Hello(value1)
myActor ? Hello(value1)
Run Code Online (Sandbox Code Playgroud) 更新:此问题包含一个错误,使基准无意义.我将尝试更好的基准比较F#和Erlang的基本并发功能,并在另一个问题中查询结果.
我正在尝试了解Erlang和F#的性能特征.我发现Erlang的并发模型非常吸引人,但我倾向于使用F#来实现互操作性.虽然开箱即用F#不提供像Erlang的并发原语 - 从我可以告诉async和MailboxProcessor只涵盖Erlang做得很好的一小部分 - 我一直试图了解F#性能的可能性明智的.
在Joe Armstrong的Programming Erlang一书中,他指出Erlang中的进程非常便宜.他使用(大致)以下代码来证明这一事实:
-module(processes).
-export([max/1]).
%% max(N)
%% Create N processes then destroy them
%% See how much time this takes
max(N) ->
statistics(runtime),
statistics(wall_clock),
L = for(1, N, fun() -> spawn(fun() -> wait() end) end),
{_, Time1} = statistics(runtime),
{_, Time2} = statistics(wall_clock),
lists:foreach(fun(Pid) -> Pid ! die end, L),
U1 = Time1 * 1000 / N,
U2 = Time2 * 1000 / N,
io:format("Process spawn time=~p (~p) microseconds~n",
[U1, U2]).
wait() -> …Run Code Online (Sandbox Code Playgroud) 在ScalaActors.pdf上的这个幻灯片放映中,单个引号指示何时将消息发送给pong actor?
class Ping(count: int, pong: Pong) extends Actor {
def act() {
pong ! 'Ping // what does the single quote indicate???
receive {
case 'Pong =>
}
}
}
Run Code Online (Sandbox Code Playgroud) 如果我发送相同的消息,告诉和转发有什么区别:
case msg: Message =>
otherActor tell (msg,sender)
Run Code Online (Sandbox Code Playgroud)
和
case msg: Message =>
otherActor forward msg
Run Code Online (Sandbox Code Playgroud) 我正试图找到'正确'的演员实现.我意识到有一堆它们,选择一个有点令人困惑.就个人而言,我对远程演员特别感兴趣,但我想完整的概述会对很多人有所帮助.这是一个非常普遍的问题,所以请随意回答您所了解的实施问题.
我知道以下Scala Actor实现(SAI).请添加缺少的.
Scalaz(http://code.google.com/p/scalaz/)
这些SAI的目标用例是什么(轻量级与"重型"企业框架)?
我觉得在Scala中使用actor有点不安全.我已经阅读了有关如何做东西的文档,但我想我还需要一些DO NOT规则才能随意使用它们.我想我会害怕以错误的方式使用它们,我甚至都不会注意到它.
你能想到一些东西,如果应用的话,会导致Scala演员带来的好处,甚至是错误的结果吗?
我正在为Python 2.x寻找一个易于学习的Actor库或框架.我尝试了Candygram和Twisted,但我不喜欢它们.我想要一些很容易扩展到suppero Greenlet(= stackless python)的东西.
你有什么建议?
我正在做一些客观的C/iOS开发,并听过几个对Actor模式的引用.在Big Nerd Ranch的书中,它说:
当您有一个长时间运行的任务和一些需要在完成后执行的代码时,将使用一个actor对象.这种对象被赋予执行任务所需的信息以及在该任务完成时执行的回调.actor在没有任何进一步输入的情况下在自己的线程上运行,并在完成时被销毁.
这里的演员与网络电话一起使用.这是演员主要使用的方式吗?是否与代表团相互排斥或互补?Actor的定义似乎非常广泛,我试图更好地处理它的含义.此外,是否可以在非OO环境中拥有Actor?