微软开源 P 语言,实现安全的异步事件驱动编程

简介:

微软最近开源了P语言,致力于在Linux、macOS和Windows上编写安全的异步事件驱动程序。

微软将P描述为一种领域特定语言,对异步系统的组件间通信进行建模,例如嵌入式、网络或分布式系统。P程序是通过有限状态机(finite state machine)来定义的,这些状态机会并发运行。每个状态机都有一个输入队列、状态、转换、机器本地存储,并且可以发送异步信息给其他状态机。在P中的基本操作要么是更新本地存储,发送消息,要么就是创建新的状态机。如下的代码片段展示了如何使用P来描述一个状态及其转换。除此之外,它还展现了如何发送消息或创建新的状态机:

start state Init {
    entry {
        server = new Server();
        raise SUCCESS;
    } on SUCCESS goto SendPing;
state SendPing {
    entry {
        send server, PING, this;
        raise SUCCESS;
    }
    on SUCCESS goto WaitPong;
}

按照微软的说法,P程序能够使用模型检查功能来进行核实。这样的话,就允许开发人员确保所有的事件均能得到及时地处理。对于P程序来说,要想保证响应性,它的状态机就要处理每个状态上所有可以出队(dequeue)的事件。这种做法并不一定总是可行,因此对一些事件可能会进行延迟处理。在这种情况下,语言能够确保某个事件不会无限期延迟。P编译器能够核实程序的状态,还可以生成C代码,并交给C编译器执行,另外,它还可以输出Zing模型,用于系统测试。Zing是一个针对并发程序的开源模型检查器,它能够系统性地暴露一个模型所有可能出现的状态。

微软使用P语言实现和检验了Windows 8 USB设备驱动栈的核心功能。按照微软的说法,工程师使用P来序列化大量来自硬件、操作系统、功能驱动以及其他驱动组件的不同事件,提升了性能和可靠性。他们尤其指出,在新的USB hub驱动中,非法内存访问和竞态条件的数量不那么明显了,同时,枚举时间快了30%,也没有观察到worker条目饿死的现象。

文章转载自 开源中国社区 [http://www.oschina.net]

目录
相关文章
|
7月前
|
安全 数据处理 C++
【Qt 底层之事件驱动系统】深入理解 Qt 事件机制:主事件循环与工作线程的交互探究,包括 QML 的视角
【Qt 底层之事件驱动系统】深入理解 Qt 事件机制:主事件循环与工作线程的交互探究,包括 QML 的视角
1579 3
|
4月前
|
测试技术 程序员 开发者
Ruby事件驱动编程的奥秘:如何打造响应式设计,让你的应用程序飞起来?
【8月更文挑战第31天】在现代编程领域,事件驱动编程已成为构建响应式与高并发应用的重要范式,尤其在动态、面向对象的Ruby语言中表现突出。本文深入探讨了Ruby中的事件驱动编程,包括概念介绍、核心机制(如回调函数与事件循环)及常用库(如EventMachine)。通过示例代码展示了如何使用EventMachine实现事件驱动的设计,并提出了合理使用回调、优化事件处理等最佳实践,助力开发者构建高效、灵敏的应用程序。
44 0
|
4月前
|
存储 算法 安全
C#语言进阶(二)—事件全解
C#语言进阶(二)—事件全解
42 0
|
6月前
|
数据采集 JavaScript 前端开发
理解并应用:JavaScript响应式编程与事件驱动编程的差异
了解JavaScript的响应式编程与事件驱动编程至关重要。事件驱动编程基于事件触发函数执行,如用户交互或系统事件。响应式编程则关注数据流变化,利用Observables自动响应更新。在爬虫代理IP的Web Scraping示例中,两者分别通过axios和rxjs显示了数据抓取的不同处理方式。掌握这两者能提升异步操作的效率和代码质量。
理解并应用:JavaScript响应式编程与事件驱动编程的差异
|
7月前
|
消息中间件 存储 设计模式
JavaScript发布订阅模式:实现事件驱动编程!
JavaScript发布订阅模式:实现事件驱动编程!
|
设计模式 Go
Go语言事件系统设计解析:发布-订阅模式实战
Go语言事件系统设计解析:发布-订阅模式实战
493 0
【EventBus】事件通信框架 ( 总结 | 手写事件通信框架完整代码示例 | 测试上述框架 )(二)
【EventBus】事件通信框架 ( 总结 | 手写事件通信框架完整代码示例 | 测试上述框架 )(二)
151 0
【EventBus】事件通信框架 ( 总结 | 手写事件通信框架完整代码示例 | 测试上述框架 )(二)
【EventBus】事件通信框架 ( 总结 | 手写事件通信框架完整代码示例 | 测试上述框架 )(一)
【EventBus】事件通信框架 ( 总结 | 手写事件通信框架完整代码示例 | 测试上述框架 )(一)
141 0
|
Web App开发
移动端基础事件和交互(未完待续)
移动端基础事件和交互
1288 0
|
消息中间件 存储 编解码
基于事件驱动应用的福音-函数计算异步调用目标
事件驱动(Event driven)是函数计算的最重要的特质之一,正是由于函数计算和事件源的深度集成,使得函数计算服务成为处理云服务事件最便捷的一种方式,让用户无需自行搭建各类中间件,方便的构建使用云上各种能力的应用。 函数计算近期发布了异步调用目标功能,让函数计算不仅可以作为事件的消费者,也成为了事件的生产者。该功能还增强了异步执行函数的可观测性,让用户更方便的构建基于事件驱动的应用。