GMTC全球大前端技术大会(北京站)门票9折特惠截至本周五,点击立减¥480 了解详情
写点什么

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

2009 年 3 月 11 日

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 年 3 月 11 日 21:35767
用户头像

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

关注

评论

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

windows平台python3使用impyla连接hive问题汇总

誓约·追光者

hive python3.x Windows 10

python——dict常用方法

菜鸟小sailor 🐕

【高并发】面试官:Java中提供了synchronized,为什么还要提供Lock呢?

冰河

Java synchronized 同步 lock 锁机制

升级Php Curl扩展遇到的坑

心平气和

php curl php扩展

招商2020第十三届(南京)智慧城市技术与应用产品展览会

InfoQ_caf7dbb9aa8a

不愧是阿里大牛,竟然熬夜写了份《Spring MVC源码笔记》还整理成了文档,赶紧收藏!

Java成神之路

Java 编程 程序员 面试 Spring MVC

关于手机里的IP地址,你不得不知道的“秘密”

脑极体

网上赌博输了怎么办?上岸戒赌是唯一的选择

jdxj

网上赌博输了怎么办 网上赌博玩快三输了怎办 网上玩快三输了怎么回血 网赌输了怎么戒赌

JDK15真的来了,一起来看看它的新特性

程序那些事

Java JDK15 JDK15新特性 java15新特性

宁静的可贵

谷鱼

宁静

架构师训练营大作业

叮叮董董

关于java使用JDBC连接数据库

谷鱼

Java JDBC

为什么很多人不买iPhone?

北柯

第一周学习总结

Geek_Albert

物流系统架构设计文档

莫莫大人

极客大学架构师训练营

oeasy教您玩转linux 010216 随机诗词 fortunezh

o

拓扑排序就这么回事

小齐本齐

数据结构 算法 数据结构和算法

共享内存原理与VCS监控采集实战

vivo互联网技术

监控 中间件 架构设计 数据采集 埋点

字节高级工程师告诉我,想越过开发5年的“分水岭”这样做最适合

周老师

Java 编程 程序员 架构 面试

Spring 5 中文解析数据存储篇-理解Spring事物抽象

青年IT男

Spring5 数据存储

全屋智能2020第十三届(南京)国际智能家居展览会

InfoQ_caf7dbb9aa8a

JDK15正式发布,新增功能预览!

王磊

Java

手写一个抖音视频去水印工具,千万别刚一个程序员

程序员内点事

Java springboot

IP网络

菜鸟小sailor 🐕

配置时间特性

小知识点

大数据 flink scal

架构师训练营 - 大作业(二)

张明森

快讯2020第十三届亚洲国际物联网展览会-南京站

InfoQ_caf7dbb9aa8a

架构师训练营大作业一

子豪sirius

【高并发】面试官:说说缓存最关心的问题?有哪些类型?回收策略和算法?

冰河

缓存 面试 引用 offer 回收

甲方日常 16

句子

随笔杂谈

食堂就餐卡系统设计

Geek_Albert

食堂就餐卡系统设计

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