写点什么

Concurrent Basic——基于消息并发的声明式语言

  • 2009-03-11
  • 本文字数:1610 字

    阅读完需:约 5 分钟

Concurrent Basic 初现 Visual Basic 未来发展端倪。虽然它建立在 C#在研语言例如 Polyphonic C#和 C-Omega 的工作基础之上,然而,Visual Basic 之所以对其青眼有加,还是在于它具备声明式编程的固有特征。VB 的声明式事件处理器激发了这一语法灵感。

关键字

  • Asynchronous——表示消息队列的方法。
  • Synchronous——表示请求队列的方法。
  • When——用于表现双方的异步和同步事件。

下面是使用这些关键字实现的完整示例,它定义了一个线程安全的缓冲区 Buffer。

复制代码
Class Buffer(Of T)
Asynchronous Sub Put (t as T)
Synchronous Function Take() as T
Function React (t as T) as T When Put, Take
Return T
End Function
End Class

函数 Put 可以被用户异步调用。Take 函数在调用时会阻塞线程,直到最后一项被 Put 取出。React 函数处理的实现细节是通过 Put 将队列中的对象转换为 Take 所期望的形式。

下面是两个更复杂的示例。第一个示例会等待 A 或者 B 上的一条消息。第二个示例则等待 A 和 B 都有消息时才终止。

复制代码
Class Either(Of T)
Asynchronous Sub PutA(t as T)
Asynchronous Sub PutB(t as T)
Synchronous Function TakeEither() as T
Function ReactA(t as T) as T When TakeEither, PutA
Return T
End Function
Function ReactB(t as T) as T When TakeEither, PutB
Return T
End Function
End Class
Class Both(Of T, U)
Asynchronous Sub PutA(t as T)
Asynchronous Sub PutB(u of U)
Synchronous Function TakeBoth() as T
Function React(t as T, u as U) as Pair(Of T, U) When Take, PutA, PutB
Return new Pair(Of T, U)(t, u)
End Function
End Class

下面的例子是一种单位置缓冲(one place buffer)模式,这种缓存每次最多只能存储一条消息。

复制代码
Class OPB(of T)
Sub New
Empty()
End Sub
Synchronous Sub Put (t as T)
Synchronous Function Take() as T
Private Asynchronous Empty()
Private Asynchronous Full(of T)
Sub PutAndEmpty(t as T) When Put, Empty
Full(t)
End Sub
Sub TakeAndFull(t as T) as T When Take, Full
Empty()
Return t
End Sub
End Class

如果深入分析,Put、Take、Empty 与 Full 函数均体现了内部队列。执行相关的 React 方法则是通过对 When 子句与队列大小进行模式匹配。

迄今给出的示例均假定 Take 方法是同步的。然而这却并非必然,你也可以使用回调。

复制代码
Class AsyncBuffer(Of T)
Asynchronous Sub Put (t as T)
Asynchronous Function Take() as T
Function React (callback as Func(t as T), t as T) as T When Put, Take
Return callback(t)
End Function
End Class

使用该方法时,将引发一个线程执行 React 和回调方法。某些开发人员可能需要执行其他工作,例如使用一个线程池、GUI 线程或者其他线程库。为此,你需要实现 ContinuationAttribute。以下是该特性的定义。

复制代码
Public MustInherit Class ContinuationAttribute
Inherits Attribute
Public MustOverride Sub BeginInvoke( task As Continuation)
Public MustOverride Sub Invoke( task As Continuation)
End Class
Public Delegate Sub Continuation()

示例与用法

复制代码
Public Class MyThreadPoolAttribute
Inherits ContinuationAttribute
Public Overrides Sub BeginInvoke( task As Continuation)
ThreadPool.Enqueue(task)
End Sub
Public Overrides Sub Invoke( task As Continuation)
task()
End Sub
End Class
<p>Class AsyncBuffer(Of T) <br></br> Asynchronous Sub Put (t as T) <br></br> Asynchronous Function Take() as T <br></br> Function React (callback as Func(t as T), t as T) as T When Put, Take <br></br> Return callback(t) <br></br> End Function <br></br>End Class</p>

更多信息可以观看 Channel 9 的视频以及阅读文档 Concurrent Basic 的提议

查看英文原文: Concurrent Basic – A Declarative Language for Message-Based Concurrency.

2009-03-11 21:351139
用户头像

发布了 109 篇内容, 共 40.0 次阅读, 收获喜欢 13 次。

关注

评论

发布
暂无评论
发现更多内容

【精选教程】四大网络抓包神器,总有一款适合你

雪奈椰子

APM 应用诊断系列(二):定位资源池问题

腾讯云可观测平台

探索去中心化应用程序(DApps)开发:重塑数字世界的无限可能!

西安链酷科技

dapp去中心化系统开发

加密货币交易所开发成本:2024 年完整指南

区块链软件开发推广运营

dapp开发 区块链开发 链游开发 NFT开发 公链开发

克魔助手抓包工具完整教程

特征融合与特征交互的区别

快乐非自愿限量之名

交互 交互原型

比特币减半倒计时:NFT 生态将受到怎样的影响?

NFT Research

BTC NFT

提升Office 365网络效率的SD-WAN技术

Ogcloud

SD-WAN 企业组网 SD-WAN组网 SD-WAN服务商 SDWAN

欢迎「北辰使者」!首发队伍已集结,Milvus 社区力量持续壮大!

Zilliz

开源社区 Milvus Zilliz 北极星计划

Valkey开源社区再添新成员!阿里云与Redis核心贡献者再聚首

阿里云瑶池数据库

数据库 redis 阿里云 开源社区

2024腾讯广告正式开放代理 信息流广告代理加盟合作

陈老师讲创业

Topaz Gigapixel AI v7.1.1激活版 mac/win

iMac小白

什么是数据库事务?更新事务实现流程是怎样的

派大星

Java 面试题

defi交易挖矿系统开发 dapp智能合约开发技术

西安链酷科技

DAPP系统开发 defi金融开发

Vue 3 进阶用法:异步组件

快乐非自愿限量之名

Vue 异步

百度智能云宣布国内首家支持Llama3全系列训练推理

科技热闻

天花板!充值运营平台限时返场!

开源物联卡管理平台-设备管理

物联网 IoT eSIM安全 java 技术提升

引领区块链创新:公链技术开发公司的先驱之路

西安链酷科技

合约量化 合约开发 公链钱包开发

公链技术开发公司:打造安全、高效的区块链基础设施

西安链酷科技

交易所开发 公链钱包开发

Uniswap丨justswap丨pancakeswap去中心化薄饼交易所系统开发

区块链软件开发推广运营

dapp开发 区块链开发 链游开发 NFT开发 公链开发

数据治理的五大误区与破解方法

郑州埃文科技

数据治理

网站的静态资源怎么获取?

不在线第一只蜗牛

网站 静态资源

两种解法搞定Swap Nodes in Pairs算法题

EquatorCoco

算法

携手打造开放AI生态,英特尔助力千行百业数智化变革

E科讯

小型企业网络优化加速方案

Ogcloud

网络 SD-WAN 企业组网 企业网络 SD-WAN组网

QSDK QCN9274/QCN6274 vs. MTK MT7915: A Comparative Analysis

wifi6-yiyi

IPQ8072 WiFi7 ipq9574

百度文库「一站式AI内容创作平台」再上新!重磅发布「跨模态AI漫画及画本生产能力」

Geek_2d6073

公链技术开发公司:构建去中心化应用的新引擎

西安链酷科技

公链团队

公链技术开发公司:引领区块链技术的商业化进程

西安链酷科技

区块链技术公司

Termius for Mac(多协议远程终端管理工具)

iMac小白

Termius下载 Termius for Mac下载 Termius for Mac破解

Application Loader不错的打包App,上架App工具使用

雪奈椰子

Concurrent Basic——基于消息并发的声明式语言_.NET_Jonathan Allen_InfoQ精选文章