我最近一直在学习并发和协调运行时(CCR)的输入和输出. 为这项相对较新的技术寻找良好的学习资源非常困难.
(快速的谷歌搜索带来了"Creedence Clearwater Revival"作为最佳结果!)
我发现的一些资源:
你对CCR有什么好的学习资源吗?
我真的希望微软能够发布更多的材料,到目前为止它已经过于机器人技术了.我相信MS需要承认大多数人在DSS和机器人工作室的日照中使用CCR.
Mix 2010会议上有一篇关于他们如何在中间层使用CCR框架的演示文稿.他们还开源代码库.
拥有一组长期独立的任务:从文本文件中解析数千行,保存为对象,操作和持久化.
如果我在Java中实现它,我想我可能会为每个X行(即块)中的文件或任务中的每一行向Executor添加一个新任务.
对于我正在使用的.Net,我不太确定.我怀疑也许CCR在这里可能是合适的,但我对它不够熟悉,这就是我提出这个问题的原因.
CCR能否以与Java Executors等效的方式运行,还是有其他可用的东西?
谢谢
微软的并发和协调运行时完全保存了一个项目,该项目遇到了死锁的重大问题.从那时起,我发现我越来越频繁地使用它来处理需要异步编码的任何事情,从而产生比以前更快更快的结果.我可以诚实地说它改变了我对多线程/多核开发的看法.尽管我个人对CCR很感兴趣,但在网络上似乎没有什么嗡嗡声,并且想知道是否有人可以提供任何理由.是否有更好的替代方案,或者是MS缺乏推广,还是人们对现有工具感到满意?
具有复杂的任务序列,实现错误处理可以在使用try/catch块和诸如Choice接收器之类的东西时PortSet<ActualResult, Exception>
为每个小任务快速膨胀代码.
值得庆幸的是,CCR似乎提供了一种机制来以更通用的方式处理异常,用于任务图:因果关系.典型示例如下所示:
Port<Exception> exceptionPort = new Port<Exception>();
Dispatcher.AddCausality(new Causality("some job", exceptionPort));
Arbiter.Activate(
dispatcherQueue,
Arbiter.Receive(false, exceptionPort, ex => Console.WriteLine(ex)));
// now schedule the real tasks
Run Code Online (Sandbox Code Playgroud)
就我而言,我有一个使用CCR的计算密集型应用程序来实现分散/聚集场景,将"作业"分成一堆并行任务.(除此之外,这些作业中的多一个可以同时运行.)如果一个任务失败,我想要停止作业中的所有剩余任务,但不能停止任何其他任务.(如果我错过了一块拼图,结果对我没用,所以继续研究这个只会浪费CPU时间.)
问题是实施停止的最佳方法是什么.
一个想法是:
Dispatcher
实例并将其保持在应用程序生命周期DispatcherQueue
为每个"工作"(一组任务)创建一个新的.Causality
创建后立即添加DispatcherQueue
.Suspend()
上DispatcherQueue
.我想知道这个建议是否可以被视为最佳实践,或者是否有更好的方法来处理这种 - 可能是相当常见的 - 情景.
Microsoft至少有两种不同的方法可以改进对并发操作的支持.
1)并发协调运行时(CCR)是Microsoft Robotics Studio和CCR&DSS Toolkit的一部分
2)Task Paralell Library(TPL)(.NET 4.0的一部分,现在是Beta 1版本)
我想知道是否有人对这两个不同的软件有经验并会比较和对比吗?
如何在机器人之外使用CCR,DSS,VPL(又名微软机器人开发工作室)?
我正在寻找这个领域的指导.我已经尝试了所有的例子,并找到了有趣的框架.
任何人都可以在机器人之外发布其他用途和示例吗?
PS.我正在寻找有人向我解释一些更复杂的东西.我对不同的实现有疑问.如果有人有兴趣,我愿意就高级主题进行一对一的谈话(咨询).您可以通过电子邮件与我联系,其名称与此处相同.
我正在解析.xml文件,如:
<xml>
<normalRange>100-200</normalRange>
<value>83</value>
</xml>
Run Code Online (Sandbox Code Playgroud)
在.xls样式表中,我需要显示一个值,该值指示值是在normalRange中,在其下方还是在其上方.
当从CCR(医疗保健HL7消息传递中的连续性护理记录)xml文档显示人类可读结果时,这是一个非常常见的问题.
我确实在手册中找到了 MOVE from CCR 指令... http://www.freescale.com/files/archives/doc/ref_manual/M68000PRM.pdf
但我不断收到“无效寻址模式”错误。我尝试了不同形式的语法,无论如何我只想存储进位位,而不是整个 CCR。这些都是我尝试过的语法,但没有成功。它非常明确地指出大小必须是单词。
MOVE.W CCR,D6
MOVE.W CCR,CARRY
MOVE CCR,D6
MOVE CCR,CARRY
MOVE.B CCR,D6
MOVE.B CCR,CARRY
Run Code Online (Sandbox Code Playgroud)
没什么。我究竟做错了什么?有没有更好的方法来专门存储进位位(C)?
我有兴趣比较各种可扩展性和并发性方法,包括CCR和DSS框架模型.我会特别感兴趣的是与Hadoop和Erlang风格的比较
我注意到 Mailbox 类型是封装的,只能通过使用 MailboxProcessor 来使用。
这意味着要拥有一个可以向其发布消息的代理,我必须拥有一个单一类型的邮箱(或以奇特的方式使用现有的 MailboxProcessor)。
我是否应该理解为单个工作流程设置多个邮箱本质上会导致糟糕的设计?Ccr 显然为您提供了这种程度的自由。
编辑:正如丹尼尔指出的那样,如果一个人想发送多种消息类型,DUs 优雅地解决了这个问题——而且我过去也没有这样做过。
但问题是,这样做是不是一种代码味道?随着时间的推移,添加更多类型的发送给代理的消息会不会导致您承担太多责任?我有时认为始终将代理使用的消息类型封装在接口后面很重要,这样这些信息就不会公开。