NVIDIA 初创加速计划,免费加速您的创业启动 了解详情
写点什么

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:351118
用户头像

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

关注

评论

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

软件测试的三个沟通技巧

FunTester

2022最新Java面试突击手册,1000道面试题+优质面经

Java全栈架构师

Java 程序员 面试 算法 计算机网络

Zadig 面向开发者的自测联调子环境技术方案详解

Zadig

DevOps Service Mesh CI/CD 测试环境治理

TDengine ×英特尔®边缘洞见软件包 加速传统行业的数字化转型

TDengine

数据库 tdengine 时序数据库

为什么要使用 Rust 语言?

面向加薪学习

rust

安全 创新 实践|海泰方圆受邀参加“数字时代的网信创新与价值共创”技术交流研讨会

电子信息发烧客

wrk压力测试工具介绍

乌龟哥哥

6月月更

OUT了吧,Kafka能实现消息延时了

华为云开发者联盟

云计算 开发

构建实战化防御体系之立体防渗透

穿过生命散发芬芳

6月月更 攻防演练

直播预告|SQL也能玩转工业级机器学习?MLOps meetup V3带你一探究竟!

星策开源社区

人工智能 机器学习 sql 特征平台 MLOps

微博评论的高性能高可用计算架构方案

joak

Mac中Git如何忽略.DS_Store文件

坚果

git git 规范 6月月更

华为云的AI深潜之旅

脑极体

Android Target 31 升级全攻略 —— 记阿里首个超级 App 的坎坷升级之路

阿里巴巴终端技术

android App target

Java Core「19」使用 Java IO API 创建 C/S 程序的方法

Samson

学习笔记 Java core 6月月更

Zadig + SonarQube,为开发过程安全保驾

Zadig

DevOps 代码扫描 SonarQube 质量内建

OneFlow源码解析:算子签名的自动推断

OneFlow

源码解析 算子 Relu

Zadig 正式推出 VS Code 插件,本地开发更高效

Zadig

vscode 插件 热部署 本地化开发 Zadig

Zadig 构建究竟何强大?一起来实践

Zadig

gitlab 云原生 jenkins Zadig

如何高效优雅地管理接口文档

Liam

测试 开发工具 API接口管理 API文档 免费API接口

奇怪,为什么ArrayList初始化容量大小为10?HashMap的初始化容量为16?

Java全栈架构师

Java 源码 程序员 面试 程序人生

基于管线的混合渲染

Finovy Cloud

gpu 渲染器 GPU服务器 显卡、gpu

穿越过后,她说多元宇宙真的存在

脑极体

提升可观测性 - 业务指标监控实践

bilibili游戏技术

IDC:阿里云获2021中国数据治理平台市场份额第一

阿里云大数据AI技术

数据挖掘 大数据 数据采集

十大靠谱“计算机视觉数据集”榜单

澳鹏Appen

人工智能 机器学习 计算机视觉 数据集 训练数据

如何设计业务高性能高可用计算架构 - 作业

阿拉阿拉幽幽

应用实践 | 10 亿数据秒级关联,货拉拉基于 Apache Doris 的 OLAP 体系演进(附 PPT 下载)

SelectDB

数据库 flink OLAP Doris 数仓建设

电商秒杀系统架构设计

哈喽

「架构实战营」

Zadig + 洞态 IAST:让安全溶于持续交付

Zadig

DevSecOps 代码安全检测 安全测试 Zadig

终于有人用7部分讲明白了Spring Security OAuth2.0认证授权全过程

Java全栈架构师

Java spring 程序员 面试 springsecurity

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