Electronic Joint Business

Solution for E-Business

Axum, 一切为了并行 (一)

编写并行程序并不容易,首先要将方案切割为许多并行任务(Task)。较为简单的方案,如计算每只股票的年收益率,很容易实施并行,因为任务之间彼此独立。但另外一些方案则十分复杂,任务之间彼此依赖且要相互协作,比如网络游戏。 Axum试图提供一种更为自然的方式来安排组件之间的协作问题。换句话说,如果将方案按照交互式组件建模,在Axum中编码会更为直接了当,而且你可能可以不被许多常见的并发问题所困扰。 并行的另一个目的是为了提速。经常,程序的反应速度总被象I/O或者用户输入这样的慢速组件所拖累。比如email客户端通过慢速的网络下载邮件的时候,程序还应该能继续响应用户的动作。 Axum的目标之一就是程序不需要再担心并发问题,理论上,你的程序将变得快速而且响应及时。为此,Axum不允许自由的共享和变更线程的状态,而只允许“有节制地”存取共享的状态,这解决了许多并发问题。 从”Hello,World”开始 Axum的安装包提供了Visual Studio的集成插件,你可以在Visual Studio 2008或者Visual Studio 2010中创建Axum的解决方案。 我们从最简单的”Hello,World”入手。 using System; agent Program : Microsoft.Axum.ConsoleApplication {   override int Run(String[] args) {      Console.WriteLine("Hello, World!…..MS Axum By Ray_Linn!");   } } 这段程序以关键字“agent”开始,Axum中“代理”的概念来自模式中常见的“参与者模式”:参与者被描述成自治的实体,互相之间则通过消息来沟通,处理它们从其他参与者接受的数据,并发送给其他参与者。Axum中参与者表现为“代理”. 用Axum编写程序都是在定义代理并安排他们之间的交互。在许多方面,基于代理编程都不同于面向对象编程。首先不同于对象,代理不提供公共方法或展示他们的状态。你不能“进入”代理修改任何字段。你不能调用代理的方法并等它给你结果。相反地,你可以给它发送消息,要求它完成之后给你个响应。 Axum提供了一些支持类库包括”ConsoleApplication”等代理,这个代理完成了控制台程序”所需的一些工作:启动,设置命令行参数,停止。 上面的程序中的代理衍生自ConsoleApplication,因此我们重写(Override)入口点的Run方法。因为Axum是.net家族中的一员,它可以分享已有的所有类库。比如程序中的System.Console.WriteLine就来自基础类库BCL. 消息传递 -Message-Passing “消息传递”这个词是我杜撰的,因为它很形象地说明了Axum中的类似流水的消息处理方式,这里我们要介绍两个概念channel-通道和通道的端口port。 代理就像是个水处理机一样,它是提供数据处理的组件,它也有进水口和出水口–我们称之为通道(channel),不同的数据则从不同的通道端口(channel port)流经代理。先看个简单的例子 using System; agent Program : channel Microsoft.Axum.Application {   public Program() […]

, , ,

One thought on “Axum, 一切为了并行 (一)

Leave a Reply

Your email address will not be published. Required fields are marked *

Time limit is exhausted. Please reload CAPTCHA.