【AICon】探索RAG 技术在实际应用中遇到的挑战及应对策略!AICon精华内容已上线73%>>> 了解详情
写点什么

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

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

关注

评论

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

兆骑科创创业赛事活动服务平台,投融资服务对接,政策申报

兆骑科创凤阁

高僧斗法(博弈-Nim博弈)

Five

算法竞赛 算法题 8月月更

定制开发APP——怎样吸引更多用户?

开源直播系统源码

软件开发 直播系统源码 定制开发 app定制开发

深圳web前端培训费用多少?

小谷哥

华为被迫开源!从认知到落地SpringBoot企业级实战手册(完整版)

Java编程日记

Java 编程 程序员 面试 架构师

兆骑科创创业大赛,线上直播路演,高层次人才引进服务平台

兆骑科创凤阁

缓存穿透、缓存击穿、缓存雪崩及解决方案

Steven

OceanBase 4.0发布:首次实现单机分布式一体化架构、全面上云

OceanBase 数据库

开源一夏 | Node.js实战之Node多进程与JXcore 打包深入运用

恒山其若陋兮

开源 8月月更

前端培训班排名口碑怎么样

小谷哥

哪家web前端培训班比较好

小谷哥

2022 全球 AI 模型周报

Zilliz

深度学习 计算机视觉 Transformer 多模态

观测云产品更新|观测云计费更新;新增场景仪表板/笔记/查看器的查看权限;优化监控器和事件等

观测云

Bundle-less 的思考和实践分享

字节跳动终端技术

bundle 字节跳动 前端 构建工具 拆包

QCN9074 WiFi 6E Card OpenWRT, IPQ6010,802.11ax,wallys,QCN9074 802.11ax 4x4 MU-MIMO 6GHz wifi6E

wallys-wifi6

IPQ6010 QCN9074

毕业设计

Asha

演进式架构从不缺设计方法,最大的阻力在于「人」

万事ONES

开源一夏 | Java 覆盖jar包内的方法

六月的雨在InfoQ

开源 钉钉 Java core 8月月更

万物皆可集成系列:低代码释放用友深度价值(1)—系统对接集成

葡萄城技术团队

VPN是什么?VPN与堡垒机有啥区别?

源字节1号

软件开发 小程序开发

专访通过 OBCP V3 首位考生:V3 让知识更加结构化、体系化

OceanBase 数据库

Java:在Word文档中添加或删除页眉页脚

Geek_249eec

Java word 页眉页脚

基于 Impala 的高性能数仓建设实践之虚拟数仓

网易数帆

大数据 impala 数仓架构

身价百亿的Zendesk:创业,从一个小目标开始

ToB行业头条

刘伟光:超大型金融机构国产数据库全面迁移成功实践

OceanBase 数据库

蓝桥杯历届试题 蚂蚁感冒(模拟版+非模拟版)

Five

算法 算法竞赛 8月月更

7大特征交互模型,最好的深度学习推荐算法总结

博文视点Broadview

leetcode 225. Implement Stack using Queues 用队列实现栈(简单)

okokabcd

LeetCode 数据结构与算法

3D可视化在智慧园区的应用

3DCAT实时渲染

【计算讲谈社】第九讲|“碳中和”时代下:计算的机会在哪里?

大咖说

计算 碳中和

OceanBase CEO杨冰:小就是大,构建企业核心竞争力

OceanBase 数据库

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