当前位置: 首页 > article >正文

用Zig开发Web后端独特好处

在 Web 后端开发中,使用 Zig 语言可以带来一些独特的好处,尤其是在内存管理方面。

竞技场分配器(Arena Allocator):
每个传入的请求都会创建一个竞技场分配器,并将其传递给处理程序。这意味着在处理请求时,所有的内存分配都会在这个竞技场中进行。

这种方法与 Go 语言的垃圾回收(GC)机制类似,从人体工程学角度来看,使用起来非常方便。你不需要手动跟踪内存的分配和释放,系统会自动处理。

与 Go 的对比:
对于 Go 程序员来说,这种过渡非常容易,因为处理程序代码读起来就像 Go 代码一样。路由处理也是如此,因为 Web 库是由经验丰富的 Go 开发人员编写的。

与 Go 的 GC 不同:

  • Go 运行时决定何时释放内存,并且检查需要释放的内容相对昂贵。
  • 而使用竞技场方法**(Arena Allocator)**,内存释放会在请求结束时确定性地发生,只需要一个简单的 free() 调用,不需要复杂的检查,因此更快更简单。

与 Rust/C++ 的对比:

  • Rust 和 C++ 使用 RAII(资源获取即初始化)方法来管理内存,这种方法在逐步释放每一个小分配时效率较低。它不了解分配是如何组合在一起并相互关联的。
  • 在压力测试中,这种方法的性能在重负载下会开始不稳定地下降,而竞技场分配器则不会出现这种问题。

总的来说,使用 Zig 的竞技场分配器在 Web 后端开发中可以提供高效且易于管理的内存分配方式,特别适合需要处理大量请求的场景。这种方法结合了 Go 的便利性和 Rust/C++ 的性能优势,同时避免了它们的某些缺点。

Go资深贡献者米切尔·桥本 (Mitchell Hashimoto) 切换到Zig语言
米切尔·桥本(Mitchell Hashimoto)是一位知名的软件开发者和企业家。他是HashiCorp公司的联合创始人之一,这家公司以开发一系列流行的DevOps工具而闻名。HashiCorp的工具包括:

  • Vagrant:用于创建和配置轻量级、可重复、便携的开发环境。

  • Packer:用于从单一源配置创建多个平台的机器镜像。

  • Terraform:用于基础设施即代码(IaC),允许用户使用声明性配置文件管理云基础设施。

  • Vault:用于管理机密和保护敏感数据。

  • Consul:用于服务发现和配置。

米切尔在开源社区中非常活跃,并且对现代基础设施和DevOps实践有着深远的影响。他的工作主要集中在提高开发者和运维人员的工作效率,简化基础设施管理。

尽管他在Golang(Go语言)社区中有很大的影响力,并且用Go语言开发了许多工具,但他最近的一些言论表明他对Go语言的使用和选择有了一些变化,特别是在涉及性能关键型系统和需要与GPU交互的项目时。

米切尔对 Golang 的选择发生了变化,这真的很有趣。他花了很多时间(大约 10 年)用 Golang 编写基础设施服务,作为 HashiCorp 业务的一部分,可能还不止这些。
他最近的工作是开发一个新终端,但他没有选择 Golang。考虑到他想在那里实现的目标(例如,使用 GPU 进行大量低级工作,需要通过 Swift 等其他语言导入),这对我来说有点道理。
米切尔同时表示:

  • 他不知道 Golang 目前在技术栈中处于什么位置。他会将 PHP/Ruby 用于 web 开发,将 Rust/Zig 用于性能关键型系统。

  • 泛型让 Golang 变得更糟。

  • 在尝试了新语言之后,他觉得自己不能再用 Golang 写终端了。

这种转变怎么会发生在 Golang 生态系统的一位杰出贡献者身上。这是否只是他极度疲惫的表现,让他远离了 Golang?还是其他原因?


http://www.kler.cn/a/511997.html

相关文章:

  • 云上贵州多彩宝荣获仓颉社区先锋应用奖 | 助力数字政务新突破
  • OpenHarmony-7.IDL工具
  • 【线性代数】行列式的概念
  • Python操作Excel——openpyxl使用笔记(2)
  • MongoDB 学习指南:深入探索非关系型数据库
  • 【Java】LinkedHashMap (LRU)淘汰缓存的使用
  • k8s 部署kafka单机和集群
  • 使用 Parcel 和 NPM 脚本进行打包
  • 【大数据】机器学习------聚类
  • 常见的图形库概览-03-D3.js 入门例子
  • 计算机系统原理:一些断言
  • Transformer详解:Attention机制原理
  • Vue2:el-tree用scope slot为每一个节点添加一个鼠标悬浮时出现的右对齐的按钮
  • C# 事件(Event)详解
  • C++和OpenGL实现3D游戏编程【连载21】——父物体和子物体模式实现
  • PyTorch框架——基于WebUI:Gradio深度学习ShuffleNetv2神经网络蔬菜图像识别分类系统
  • 【深度学习】傅里叶变换
  • WPS不登录无法使用基本功能的解决方案
  • MySQL快速入门——库的操作
  • Golang学习笔记_28——工厂方法模式
  • Arcgis Pro安装完成后启动失败的解决办法
  • 亚马逊库存管理sql记录
  • JUnit单元测试
  • OpenAI进军实体机器人:GPT赋能的智能未来
  • 成就与远见:2024年技术与思维的升华
  • [Unity]【游戏开发】 脚本创建物体的实践与技巧