- 浏览: 461580 次
- 性别:
- 来自: 坚持零分
文章分类
最新评论
-
wzwahl36:
文章非常赞,http://www.atool.org/img2 ...
在浏览器中解析Base64编码图像 -
realyasswl:
ie sucks
IE9 媲美Firebug的强大的程序员开发工具 -
di1984HIT:
不错啊。呵呵。
MS的一些小工具 -
NothingCanBeDone:
楼主,你这Project,能放出来了,感激不尽。
[Ray Linn]用Visual Studio 2008开发IE BHO(浏览器帮助对象) 之三 -
烬难烬:
这就没了???我去....
IE9 媲美Firebug的强大的程序员开发工具
数据流网编程
在程序中,代理之间通过发送和接受消息彼此沟通,他们的沟通被程序的逻辑,程序的状态,从其他代理接受的数据等等所驱动。
与这个控制流模型相提并论的是数据流模型,在此程序的执行只为进入数据流网的数据有效性所驱动,数据在网络中移动的时候,计算同时进行着。在Axum语言中,数据流网由网络操作符所创建。一个网络操作符是个二进制表达式,左边的操作数是源,右边的操作数是目的。操作数可以是标量或矢量格式,这里标量是一个单值的数据类型,而矢量可以是数组或者数列。
下面我们根据操作数的类型对网络操作加予区分。
一对一:传递
在前面我们已经看过如何用操作符 ==> 建立管道。该操作有个单一的源交互点,并把结果传递给一个目标交互点。和传递类似的,“-->”为一次性传递操作符,该操作符从源头到目的只传递一次消息,在第一条消息传递完毕之后就断开连接。
除了建立管道,操作符还有其他用处,例如,它可以用以建立一个事件驱动的系统,根据事件采取不同的行动来做出响应。
想想普通的GUI应用中是如何操作诸如鼠标点击,按键之类的时间的,这些时间可以被当成是通道:
操作请求的代理GuiHandler可以这么实现:
GUIHandler的构造器建立了三个简单的网络,将进入的消息传递给响应的操作方法。
多对一:多元与组合
下面两个操作符有个矢量的源头而只有一个目的。
多元操作符 ">>-" 左边有一列的源头,一旦数据送达任一源头,就会并将数据挨个传递给个单一的目标.
类似的,组合操作符 "&>-" 带有一列源头,挨个接受数据,并将他们打包成一个数组(由此得名“组合”)后讲其送给单一的目的。不同的是,组合会等到所有源头都有消息后才进行打包和发送的工作的.
请看例子:我们有个带有2个交互点的数组,包含数字10和20
多元表达式如下:
该表达式将数组ips的数据送至由方法PrintOneNumber创建的节点。
相应的,我们建立组合的表达式:
这个表达式会所有的数字当成一个消息送给一个接受int数组的节点
当你需要等多个以任意顺序送抵的消息时,组合就很有用。下面的表达式组合了两个交互点ip1和ip2的输出,并把结果送交互点twoNumbers:
上面的表达式用花括号来创建数组。在Axum语言中,建立隐含数组是十分便利的语法结构,经常被用在创建网络表达式.我们在下面会看到如何建立一个更复杂的网络。
一对多:广播与轮流
最后两种网络操作符带有一个单一源交互点,将数据发送给多个目标。
广播操作符“-<<”左边是一个单一的焦点,右边是一系列交互点。它将左边的所有数据发送至右边所有的交互点。
将数据发送给多个目标可以用以实现"发布-订阅”场景,数据从发布者被送抵所有的订阅者。
最后,轮流操作符“ -<:” 将数据从单一源头的数据以循环的顺序发送给右手边的集合。轮流在需要负载平衡的场景就非常有用了。例如我们需要个“worker”池来响应从源头发布过来的数据。
把所有这些知识点串接起来,我们从新考虑一下前面的adder例子,并用数据流网来实现它。
说明如下:网络的第一个节点有个带有2个元素的数组:每个元素传递送至的数据给移交方法ShowNumber。这个方法可以用来调试,以跟踪那么到达输入端口的消息。
之后,数组节点被组合到带有整数数组的中间点ipJoin。这个节点的作用是把两个数字组合成一个序列以便能被方法GetSum处理。
网络的下一个节点仍是一个数组,它带有由方法GetSum所实现的两个转换节点。因为GetSum被声明称函数,它的执行被设置成并发的,以提高网络的流量。
最后GetSum转换后的输出被通过多元操作送至端口Sum。
分布式axum应用
回想上次发表计算梅森数列的例子,从Erlang到PlINQ纷纷上阵,在算法与语言的潜力被挖掘殆尽之后,唯一能大幅度提高性能的方式就是利用分布式。
Axum对分布式应用提供很好的支持。实际上,Axum对于isolation如此的严格使得域与域可以在本地或者远程交互而无须对模型做出修改。By borrowing a page from how the Web is programmed and making it scale to the small, we can easily go back to its roots and interact across networks.
With domains being services of a SOA application, agents the protocol handlers, and schema the payload definitions (b.t.w. schema are XML-schema compliant), we have an easy time mapping Axum to web services.
Axum运行时支持了本地的进程内的通道,同时也支持基于WCF的通道。
要取得域内的代理,你必须赋予它一个地址。本地和远程的场景是类似的。进程内的处理简单些,因为哪怕你不赋予地址,代理的类型名称仍可作为一个默认的地址。在分布式场景,我们得多一些工作。
Axum运行通过IHost接口来处理这一切,它允许你赋予代理一个域内的名字。更准确的说,我们所关联的是所保有的
In the Axum runtime, we have support for local, in-process channels as well as WCF-based channels. To reach an agent within a domain, you have to give it an address; this is true in local and remote scenarios alike. Within a process, it’s a bit easier, because the agent type name itself acts as a “default” address if nothing else, but in the distributed scenario, we have to do a bit more. But it’s just a little bit. The Axum runtime does this through an interface called IHost, which allows you to give the agent an address within a domain. To be precise, what we associate with an address is a factory for agents of the hosted type, which is used to create agent instances when someone creates a new connection. Each underlying communication / service hosting framework has to have its own implementation of IHost; Axum comes with one for WCF and one for in-process communication. The address may be associated with an existing domain instance, in which case created agent instances are associated with that domain, or it may be associated with no domain instance, in which case created agent instances are associated with a new domain instance, one for each new connection. For example, if you are building an Axum-based server, you can host domains as services with the following code:
在程序中,代理之间通过发送和接受消息彼此沟通,他们的沟通被程序的逻辑,程序的状态,从其他代理接受的数据等等所驱动。
与这个控制流模型相提并论的是数据流模型,在此程序的执行只为进入数据流网的数据有效性所驱动,数据在网络中移动的时候,计算同时进行着。在Axum语言中,数据流网由网络操作符所创建。一个网络操作符是个二进制表达式,左边的操作数是源,右边的操作数是目的。操作数可以是标量或矢量格式,这里标量是一个单值的数据类型,而矢量可以是数组或者数列。
下面我们根据操作数的类型对网络操作加予区分。
一对一:传递
在前面我们已经看过如何用操作符 ==> 建立管道。该操作有个单一的源交互点,并把结果传递给一个目标交互点。和传递类似的,“-->”为一次性传递操作符,该操作符从源头到目的只传递一次消息,在第一条消息传递完毕之后就断开连接。
除了建立管道,操作符还有其他用处,例如,它可以用以建立一个事件驱动的系统,根据事件采取不同的行动来做出响应。
想想普通的GUI应用中是如何操作诸如鼠标点击,按键之类的时间的,这些时间可以被当成是通道:
channel GUIChannel { // MouseEvent is an enum with values Up and Down input MouseEvent Click; // Key describes which key was pressed input Key KeyPress; // Rect is a rectangle to repaint input Rect Paint; }
操作请求的代理GuiHandler可以这么实现:
agent GUIHandler : channel GUIChannel { public GUIHandler() { PrimaryChannel::Click ==> HandleClick; PrimaryChannel::KeyPress ==> HandleKeyPress; PrimaryChannel::Paint ==> HandlePaint; } void HandleClick(MouseEvent mouseEvent) { ... } void HandleKeyPress (Key key) { ... } void HandlePaint (Rect rect) { ... } }
GUIHandler的构造器建立了三个简单的网络,将进入的消息传递给响应的操作方法。
多对一:多元与组合
下面两个操作符有个矢量的源头而只有一个目的。
多元操作符 ">>-" 左边有一列的源头,一旦数据送达任一源头,就会并将数据挨个传递给个单一的目标.
类似的,组合操作符 "&>-" 带有一列源头,挨个接受数据,并将他们打包成一个数组(由此得名“组合”)后讲其送给单一的目的。不同的是,组合会等到所有源头都有消息后才进行打包和发送的工作的.
请看例子:我们有个带有2个交互点的数组,包含数字10和20
var ip1 = new OrderedInteractionPoint<int>(); var ip2 = new OrderedInteractionPoint<int>(); ip1 <-- 10; ip2 <-- 20; var ips = new OrderedInteractionPoint<int>[] { ip1, ip2 };
多元表达式如下:
ips >>- PrintOneNumber;
该表达式将数组ips的数据送至由方法PrintOneNumber创建的节点。
void PrintOneNumber(int n) { Console.WriteLine(n); }
相应的,我们建立组合的表达式:
ips &>- PrintManyNumbers;
这个表达式会所有的数字当成一个消息送给一个接受int数组的节点
void PrintManyNumbers(int[] nums) { foreach(var i in nums) Console.WriteLine(i); }
当你需要等多个以任意顺序送抵的消息时,组合就很有用。下面的表达式组合了两个交互点ip1和ip2的输出,并把结果送交互点twoNumbers:
receive( { ip1, ip2 } &>- twoNumbers );
上面的表达式用花括号来创建数组。在Axum语言中,建立隐含数组是十分便利的语法结构,经常被用在创建网络表达式.我们在下面会看到如何建立一个更复杂的网络。
一对多:广播与轮流
最后两种网络操作符带有一个单一源交互点,将数据发送给多个目标。
广播操作符“-<<”左边是一个单一的焦点,右边是一系列交互点。它将左边的所有数据发送至右边所有的交互点。
将数据发送给多个目标可以用以实现"发布-订阅”场景,数据从发布者被送抵所有的订阅者。
最后,轮流操作符“ -<:” 将数据从单一源头的数据以循环的顺序发送给右手边的集合。轮流在需要负载平衡的场景就非常有用了。例如我们需要个“worker”池来响应从源头发布过来的数据。
把所有这些知识点串接起来,我们从新考虑一下前面的adder例子,并用数据流网来实现它。
agent AdderAgent : channel Adder { public AdderAgent() { var ipJoin = new OrderedInteractionPoint<int[]>(); { PrimaryChannel::Num1 ==> ShowNumber, PrimaryChannel::Num2 ==> ShowNumber } &>- ipJoin -<: { GetSum, GetSum } >>- PrimaryChannel::Sum; } private int ShowNumber(int n) { Console.WriteLine("Got number {0}", n); return n; } private function int GetSum(int[] nums) { return nums[0] + nums[1]; } }
说明如下:网络的第一个节点有个带有2个元素的数组:每个元素传递送至的数据给移交方法ShowNumber。这个方法可以用来调试,以跟踪那么到达输入端口的消息。
之后,数组节点被组合到带有整数数组的中间点ipJoin。这个节点的作用是把两个数字组合成一个序列以便能被方法GetSum处理。
网络的下一个节点仍是一个数组,它带有由方法GetSum所实现的两个转换节点。因为GetSum被声明称函数,它的执行被设置成并发的,以提高网络的流量。
最后GetSum转换后的输出被通过多元操作送至端口Sum。
分布式axum应用
回想上次发表计算梅森数列的例子,从Erlang到PlINQ纷纷上阵,在算法与语言的潜力被挖掘殆尽之后,唯一能大幅度提高性能的方式就是利用分布式。
Axum对分布式应用提供很好的支持。实际上,Axum对于isolation如此的严格使得域与域可以在本地或者远程交互而无须对模型做出修改。By borrowing a page from how the Web is programmed and making it scale to the small, we can easily go back to its roots and interact across networks.
With domains being services of a SOA application, agents the protocol handlers, and schema the payload definitions (b.t.w. schema are XML-schema compliant), we have an easy time mapping Axum to web services.
Axum运行时支持了本地的进程内的通道,同时也支持基于WCF的通道。
要取得域内的代理,你必须赋予它一个地址。本地和远程的场景是类似的。进程内的处理简单些,因为哪怕你不赋予地址,代理的类型名称仍可作为一个默认的地址。在分布式场景,我们得多一些工作。
Axum运行通过IHost接口来处理这一切,它允许你赋予代理一个域内的名字。更准确的说,我们所关联的是所保有的
In the Axum runtime, we have support for local, in-process channels as well as WCF-based channels. To reach an agent within a domain, you have to give it an address; this is true in local and remote scenarios alike. Within a process, it’s a bit easier, because the agent type name itself acts as a “default” address if nothing else, but in the distributed scenario, we have to do a bit more. But it’s just a little bit. The Axum runtime does this through an interface called IHost, which allows you to give the agent an address within a domain. To be precise, what we associate with an address is a factory for agents of the hosted type, which is used to create agent instances when someone creates a new connection. Each underlying communication / service hosting framework has to have its own implementation of IHost; Axum comes with one for WCF and one for in-process communication. The address may be associated with an existing domain instance, in which case created agent instances are associated with that domain, or it may be associated with no domain instance, in which case created agent instances are associated with a new domain instance, one for each new connection. For example, if you are building an Axum-based server, you can host domains as services with the following code:
发表评论
-
NET 4.0 多任务编程 之三 改进的线程池
2010-07-16 14:58 2223其实从.NET设计之初中就 ... -
NET 4.0 多任务编程 之四 Parallel初体验
2010-07-16 14:23 2158在.NET Framework 4.0中,在 ... -
.NET 4.0 多任务编程 之二 线程安全的集合
2010-07-14 13:54 3451随着多核计算机的普及 ... -
【C#】在C#中引用CygWin和MingW的Dll
2010-06-20 08:47 0在Windows上引入Unix或Linux的软件包,一般有以下 ... -
Java 7 闭包 -- 向C#学得更多
2010-06-08 10:55 210什么是闭包 简单来讲,闭包允许你将一些行为(包括语法和表达式 ... -
【Ray谈C#] MEF 扩展性管理框架
2010-05-28 16:58 3982原文发表于:blogs.ejb.cc M ... -
【Ray谈C#】乌龟爬之SynchronizationContexts
2010-05-19 15:09 2075为什么需要SynchronizationC ... -
用DLR创建自己的语言之一
2010-01-04 14:35 2525原文刊登于: http://www.bitwisemag.co ... -
C# 语法书 之可选参数
2009-12-22 14:40 2931适用C#版本:4.0以后 首 ... -
C# 语法书 <3> 静态类,别名等等
2009-06-30 11:32 1751最近比较忙,所以先跳 ... -
初窥Nemerle语言
2009-06-23 14:23 1735Nemerle是Microsoft的研究项目之一,由 Wroc ... -
C# 语法书 <2> 委托 delegate
2009-06-15 16:40 1876为什么要有委托? 先 ... -
C# 语法书 之 <1> 迭代器
2009-06-09 16:42 1326这个系列的主要目的是尽量能覆盖C# 1.1之后的语法更新,以便 ... -
What's New in C# 4.0 之一 语法
2009-06-08 14:54 23941. dynamic简介 在之前的文章有简单的谈到dynam ... -
What's New in .net 4.0 - 基础类库
2009-06-01 10:34 11461. System.Numerics.BigInteger ... -
一切为了并行: MS Axum语言教程 <三>
2009-05-13 14:35 1407域与状态共享 消息传递是种优秀的沟通机制,但它要消息中的数据 ... -
一切为了并行:MS Axum语言教程 <二>
2009-05-12 15:12 1011代理编程 上面的斐波那契数列的例子只是展示了一个微不足道的构 ... -
一切为了并行:MS Axum语言教程 <一>
2009-05-12 10:47 1446原文和更新参见: Ray Li ... -
C# 4.0中的契约式编程
2009-04-24 11:19 2875一切从质量谈起 许多 ... -
C# 利用范型与扩展方法重构代码
2008-04-03 14:58 2607在一些C#代码中常常可以看到 //An Simple Ex ...
相关推荐
1. axum框架概述:axum是一个用RUST编程语言编写的web框架,它是一个高性能、异步的框架,可以让我们更便捷地构建web应用。 2. 环境搭建:在开始使用axum之前,需要先搭建好RUST的开发环境,并安装好axum相关的依赖...
《Axum程序员指南》是一本深入探讨Axum编程语言的专业书籍,主要面向正在学习或已经从事Axum开发的程序员。Axum是由微软开发的一种新型的、高性能的、并发友好的编程语言,它旨在提高现代多核处理器环境下的软件开发...
OpenTelemetry Rust Rust 实现。||概述OpenTelemetry是工具,API和SDK的集合,用于检测,生成,收集和...(), Box < dyn>> { // Create a new instrumentation pipeline let tracer = stdout :: new_pipeline (). insta
You can start with the example actix-app, axum-app, dioxus-desktop or ntex-app. It requires Rust 1.75+ to build the project. cd examples/axum-app cargo run Here is the simplest application to run a ...
rust axumweb web rust,,redis,ormRibatis,casbin-rs, ,jwt casbin-rs websocket rust rust rust rust rust
在Rust编程语言中,处理HTTP请求特别是涉及文件上传时,`multipart`是一个非常重要的库。这个库提供了与后端无关的解决方案,使得开发者能够轻松地在HTTP客户端和服务器之间处理多部分表单数据,包括文件上传。在这...
它包括拉利贝拉(Lalibela)的岩石凿成教堂,阿克苏姆(Axum)方尖碑和哈拉尔(Harar)朱古拉斯主题。 我选择这个主题是因为我在EIABC校园学习,所以发现这个主题与我们所从事的领域以及课程的类型非常相关,因为...
基于Rust语言的新一代组装式应用开发框架。zino是 Rust 中可组合应用程序的下一代框架 它强调简单性、可扩展性和生产力。开箱即用的功能,可快速开发应用程序。最小的设计、可组合的架构和高级抽象。采用 API 优先的...
Rust是一种系统级编程语言,它专注于速度、内存安全和并行性,被广泛用于构建高性能软件,尤其是网络服务、操作系统组件以及游戏引擎。 描述中提到,创建者由于曾经丢失了所有C语言的源代码,因此决定将Rust项目...
此版本升级Axum至0.6.6,并消除2/3的编译警告。此版本支持Go语言通用代码生成器仙童的模板直接生成Rust代码生成物。也支持Java兼容性。支持Excel,PDF数据导出。支持Vue,ElementUI的独立前端。支持MySQL,MariaDB和...
本项目是一款基于Java实现的Rust通用代码生成器,代码名为“莲花”。...代码生成器依赖Axum 0.6.20、Tokio 1.32.0、sqlx 0.7.1等库,并支持连接MariaDB、MySQL 8、PostgreSQL、Oracle等多种数据库。
async fn add_number(_ctx: Context<'_>, number: i32) -> i32 { number * 2 } } ``` 在这个例子中,我们定义了一个名为`Query`的对象类型,它有一个名为`hello`的字段,以及一个名为`Schema`的突变,包含`add_...
WebDAV Handler库,以`webdav-handler-rs`命名,是专为Rust编程语言设计的一个高效、灵活的处理程序库。该库的主要目标是支持与HTTP服务器框架如Hyper、Warp以及Actix-Web等无缝集成,提供WebDAV协议的实现。WebDAV...
它在科学界享有极高的声誉,以其丰富的功能和灵活性著称,尽管学习曲线相对陡峭,但相比竞争对手如SPSS的SigmaPlot和MathSoft的Axum,Origin提供了更多的功能。Origin的主要版本包括5.0、6.0、6.1、7.0和7.5,而描述...
为了适应海量规模存储环境的要求,设计并实现了一种块级别的带内存储虚拟化系统(AXUM)。它使用连续空间段来组织虚拟盘和物理盘,减少了元数据的空间开销。并通过实现目标器模式的虚拟化服务,提供良好的兼容性。...
“不那么难” OAuth2客户端OAuth2确实不那么难,您知道吗? 文档许可证版权所有:copyright:2015,Curtis McEnroe,[受电子邮件保护]“不那么难” OAuth2客户端OAuth2确实不那么难,您知道吗? 文档许可证版权:...
RustJavaRust rust 1.69Axum 0.6.20Tokio 1.32.0sqlx 0.7.1MariaDB, MySQL 8, PostgreSQLOracle
#### 四、总结 JDK作为Java开发的核心工具包,提供了丰富的功能支持,每个版本都带来了重要的新特性,提高了开发效率和程序性能。通过上述介绍可以看出,不同版本的JDK针对不同的需求进行了优化,并且提供了详尽的...
5. 影像板和自动摆位治疗床:非晶硅影像接收平板提供高清图像,而AXUM治疗床具备自动摆位功能,可自动控制5个自由度,确保患者在治疗过程中的舒适和定位准确性。 射波刀技术的优势在于其高精度和灵活性,但同时也...