微软开源P语言,解决异步计算的挑战问题

简介:

微软近日发布了一篇研究报告,介绍了一种为异步性、容错性和不确定性而设计的P语言,实现安全的异步事件驱动编程。该语言基于事件进行通信,能够很好的解决并发操作所带来的问题,并能够在软件的构建、测试和调试等各个阶段发挥作用。雷锋网(公众号:雷锋网)编译如下。

新型软件的复杂性导致了编程人员需要新的方法来理解,并有效地构建、测试和调试这些系统。如今的软件通常使用云资源,嵌入在物理世界的设备中,并采用人工智能技术。这三个因素使得今天的软件系统难以发展。

通常现代应用需要异步性来提高性能,比如在下面这种情形:操作的请求者在发起操作后继续运行,而不需要等待操作完成。异步不可避免的会导致并发,以及臭名昭著的竞争现象和Heisenbug(一种奇怪的软件bug,通常是时变的,平时会出现bug,而当你要研究这个问题的时候,bug就消失了,或者每次研究的时候bug的结果都是在变化的)。

为了解决异步计算的挑战,微软开发了P语言,这是一种用于异步事件驱动型应用程序中建模和指定协议的编程语言。该项目是微软研究人员和工程师与加州大学伯克利分校以及伦敦帝国学院的学术研究人员一起合作开发的。

 

微软开源P语言,解决异步计算的挑战问题

 

图1:P语言工具链流程图

P语言编程人员在高层编写协议及其规范。P编译器提供用于并发相关竞争条件的自动测试和运行协议的可执行代码。P语言对建模并发性(modeling concurrency)、指定安全性(specifying safety)和活性属性(liveness property)提供一流的支持,并使用系统级搜索检查程序是否满足规范。

在这些方面,P语言与Leslie Lamport的TLA +和Gerard Holzmann的SPIN相似。与TLA +和SPIN不同的是,P程序也可以被编译成可执行的C代码。这种能力搭建了高级模型和低级实现之间的桥梁,并消除了程序员之间接受形式化建模和规范的巨大障碍。

 

微软开源P语言,解决异步计算的挑战问题

 

图2:通信状态机

P中的编程模型基于并发执行状态机,通过事件进行通信,每个事件伴随一个有类型的负载值。基于线性输入和独特指针的内存管理系统提供安全的内存管理和无数据竞争的并发执行。在这方面,P类似于现代系统编程语言,例如Rust。

P在微软的软件开发中,最初被用在Windows 8.1和Windows Phone中运送USB3.0驱动程序。这些驱动程序处理着Windows生态系统中众多最重要的周边设备,如今已经在数亿台设备上运行。P在驱动程序设计初期就启用了数百种竞争条件和Heisenbugs的检测和调试,现在广泛应用于Windows中的驱动程序开发。P在Windows内核中早期积累的经验导致了P#的开发,P#是通过C#拓展提供状态机和系统测试的框架。与P相反,P#中的方法是最小化语法拓展,并最大限度的利用库提供建模,规范和测试功能。

P正在改变Azure的云基础架构的发展。Azure类似于其他云提供商,面临着由意料之外的并发竞争条件或软硬件故障引起的Heisenbug的挑战。这些错误导致实时服务的中断,这是云服务的客户和提供商所面临的巨大问题。P和P#正用于在已部署的服务中查找和调试Heisenbug,并在部署前设计和验证新服务。P允许工程师在大型Azure服务中的组件之间精确的模拟异步接口。它还允许工程师发现和调试他们桌面设备上的问题,否则这些问题在部署服务几个月甚至几年之后都难以找到根源。

使P特别适用于验证容错的分布式服务的一个重要特征,是它能够进行彻底的失效恢复(failover)测试,即在意外故障发生时保证服务能够恢复,并继续之前的操作。网络信息丢失和单个状态机故障都被建模为事件。将故障建模为P中的一个事件,可以完全自动化完成故障注入,并可以在大量事件排序和故障的情况下对失效恢复进行测试,而程序员并不需要做太多的工作。

P的系统测试能力能够彻底地搜索由并发发送事件的非确定性排序引起的选择。然而,其能力主要应用在处理明确数据输入方面,尤其是对大范围输入的搜索。这种限制使得难以将P应用到复杂性来源主要是不确定的输入下进行决策这样的应用中,例如机器人技术。微软正在研究如何处理大量不确定的输入域,主要通过研究符号和概率技术来应对这一挑战。

本文转自d1net(转载)

相关文章
|
1月前
|
人工智能
微软靠“想象力”解决大语言模型调用工具两大难题!方法已开源
【2月更文挑战第24天】微软靠“想象力”解决大语言模型调用工具两大难题!方法已开源
17 1
微软靠“想象力”解决大语言模型调用工具两大难题!方法已开源
|
1月前
|
Linux 语音技术
FaceBook推出新的翻译模型Seamless!可实现跨语言交流的无缝衔接!
FaceBook推出新的翻译模型Seamless!可实现跨语言交流的无缝衔接!
|
2月前
|
Rust Java C++
Rust生态系统与社区支持:跨语言比较的探究
【2月更文挑战第1天】本文旨在比较Rust语言与其他主流编程语言(如Python、Java、C++)在生态系统与社区支持方面的差异与优势。我们将从标准库、第三方库、工具链、社区活跃度和文档质量等多个维度进行深入分析,以揭示Rust在这些方面所展现出的独特之处和潜力。
|
2月前
|
Rust 安全 物联网
Rust在系统级编程中的独特优势
本文深入探讨了Rust在系统级编程中的独特优势,包括其内存安全、高性能、并发编程能力以及与其他语言的互操作性。通过实际案例,展示了Rust如何在操作系统、嵌入式系统、网络编程等领域发挥重要作用,并预测了Rust在未来系统级编程中的发展趋势。
|
7月前
|
机器学习/深度学习 人工智能 物联网
大模型时代,还缺一只雨燕 | SWIFT:魔搭社区轻量级微调推理框架
伴随着大数据的发展和强大的分布式并行计算能力,以预训练+微调的模型开发范式渐渐成为深度学习领域的主流。 2023年各家推出的大模型浩如烟海,如GPT4、Llama、ChatGLM、Baichuan、RWKV、Stable-Diffusion等。这些模型在达到越来越好的效果的同时也需要越来越多的算力资源:全量finetune它们动辄需要几十至上百G显存训练部署,一般的实验室和个人开发者无力承担。
|
4月前
|
前端开发 数据可视化 JavaScript
【iVX】颠覆常规,首个图形通用无代码编程平台诞生
【iVX】颠覆常规,首个图形通用无代码编程平台诞生
67 1
|
6月前
|
NoSQL 关系型数据库 MySQL
互联网架构知识启蒙 - 如何用Go语言设计分布式ID生成器
互联网架构知识启蒙 - 如何用Go语言设计分布式ID生成器
67 0
|
12月前
|
开发框架 JavaScript 前端开发
探究以太坊生态系统中的Consensys:产品技术细节与应用场景介绍
探究以太坊生态系统中的Consensys:产品技术细节与应用场景介绍
|
存储 缓存 自然语言处理
【字节跳动青训营 】高性能 Go 语言发行版优化与落地实践
1.自动内存管理概要 Auto memory management: 自动内存管理 Grabage collction: 垃圾回收 Mutator: 业务线程 Collector: GC 线程 Concurrent GC: 并发 GC Parallel GC: 并行 GC Tracing garbage collection: 追踪垃圾回收 Copying GC: 复制对象 GC Mark-sweep GC: 标记-清理 GC Mark-compact GC: 标记-压缩 GC Reference counting: 引用计数 Generational GC: 分代 GC Young gene
173 1
【字节跳动青训营 】高性能 Go 语言发行版优化与落地实践
|
Rust 机器人 编译器
Rust 公布 2024 年路线图:重点涉及三个方向
Rust 公布 2024 年路线图:重点涉及三个方向
312 0