生成式AI领域的最新成果都在这里!抢 QCon 展区门票 了解详情
写点什么

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

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

关注

评论

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

图像识别数据集的重要性及其分类

来自四九城儿

袋鼠云“飞跃计划2.0”重磅发布:全面升级伙伴权益,共话数字生态

袋鼠云数栈

大数据 数字化转型 生态伙伴

PingCode 的环境和环境管理

PingCode

软件开发 开发环境 PingCode

iOS MachineLearning 系列(11)—— 自然语言识别与文本分析

珲少

焱融存储方案入选爱分析·智能制造最佳实践案例

焱融科技

高性能 #分布式文件存储 #全闪存储

2 行代码开启 SAST,将代码漏洞定位到具体行数

极狐GitLab

DevOps DevSecOps SAST 应用安全测试 安全扫描

Final Cut Pro打开时卡在“正在验证音频单元...”

互联网搬砖工作者

2 种方式在流水线中集成 DAST,动态保护应用程序安全

极狐GitLab

DevOps DevSecOps 安全左移 DAST 安全扫描

关于低代码开发,你是真的了解了吗?

加入高科技仿生人

低代码 数字化 数字转型 数智转型

羊毛党请远离消费卷

MobTech袤博科技

【崖山论“见”】YashanDB Meetup 第2期|数据库“大心脏”融合存储引擎揭秘

YashanDB

读懂海尔智家大脑:深度体验的本质是深度生活

脑极体

智慧家居 全屋智能

11分钟解决“世界性”难题!百度生物计算研究成果登顶《Nature》正刊

飞桨PaddlePaddle

百度 飞桨 nature

腾讯高工手写13W字“Netty速成手册”,3天走向实战!

程序知音

Java Netty java架构 Java进阶 后端技术

线上FullGC问题排查实践——手把手教你排查线上问题 | 京东云技术团队

京东科技开发者

GC fullstack 企业号 5 月 PK 榜 CPU告警

系统日志规范及最佳实践

阿里技术

日志

狂砍千万行代码,零故障!去哪儿网系统瘦身技术揭秘

Qunar技术沙龙

去哪儿网 系统瘦身

PUT和POST的区别

Apifox

程序员 前端 后端 post put

倒计时24天!接棒香港展,CTIS2023观众预登记全面启动

科技热闻

青年大学习自动核对名单详细教程【Python版】

BROKEN

三周年连更

独家合作:百度飞桨AI4S最新成果亮相香港力学盛会,PINN方法获得沪港众学者关注

飞桨PaddlePaddle

ChatGPT背后的打工人:你不干,有的是AI干

引迈信息

人工智能 低代码 ChatGPT JNPF

xcode打包导出ipa

雪奈椰子

苹果电脑删除磁盘分区及双系统分区的办法

互联网搬砖工作者

3D设计有哪些流程?(附自学教程)

Finovy Cloud

blender 3D软件 ZBrush

全球首个开发者村“开村”!数字之光在何处点亮?

脑极体

开发者 开发者社区

全球连接器市场规模稳健增长,我国已成为全球最大的消费市场

华秋电子

低代码工具助力提高办公效率

这我可不懂

低代码 JNPF

用友YonLinker连接集成平台构建新一代产业互联根基

用友BIP

架构师日记-深入理解软件设计模式 | 京东云技术团队

京东科技开发者

架构 设计模式 架构模式 编程语言、 企业号 5 月 PK 榜

模块2 微信朋友圈高性能复杂度分析

成长的羊

#架构训练营

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