Rust 基础入门 ——所有权 引言 :垃圾自动回收机制的缺陷。

简介: 能有这些问题的部分发生场景:游戏开发:在游戏开发中,需要保持稳定的帧率和低延迟,以提供流畅的游戏体验。如果GC频繁触发或停顿时间过长,会导致游戏卡顿或掉帧,影响游戏的流畅度和响应性能。

在以往,内存安全几乎都是通过 GC 的方式实现,但是 GC 会引来性能、内存占用以及 Stop the world 等问题,在高性能场景和系统编程上是不可接受的,


我们先介绍一下这些概念都是什么:

内存安全是指程序在运行过程中不会访问未分配的内存或者已释放的内存,从而避免了内存相关的错误,如空指针引用、野指针等。传统上,内存安全通常通过垃圾回收(Garbage Collection,GC)来实现,GC会自动回收不再使用的内存,但是它会带来一些性能、内存占用和停顿等问题。


在高性能场景和系统编程中,这些问题是不可接受的。因此,一些编程语言(如Rust)提供了其他的内存安全机制,如所有权系统和借用检查器。这些机制允许程序员在编写代码时显式地管理内存,从而避免了GC带来的性能和停顿问题。同时,这些机制还可以在编译期间检查出潜在的内存安全问题,提前发现和修复错误。


Stop the world是指在垃圾回收(Garbage Collection,GC)过程中,程序的执行会被暂停(停顿),直到垃圾回收完成。在这个停顿期间,程序无法继续执行,所有的线程都被暂停。这种停顿会导致程序的响应性下降,特别是在需要实时性能或低延迟的场景下是不可接受的。


Stop the world问题是垃圾回收机制的一个固有问题,因为在进行垃圾回收时,需要遍历整个堆内存,找出不再使用的对象并进行回收。在这个过程中,程序的执行必须暂停,以确保垃圾回收器能够正确地访问和修改堆内存。


为了减少Stop the world问题的影响,一些现代的垃圾回收算法采用了增量式垃圾回收或并发垃圾回收的方式。


  • 增量式垃圾回收将垃圾回收过程分为多个阶段,在每个阶段中只回收一部分对象,从而减少了停顿的时间。
  • 并发垃圾回收则允许垃圾回收器在程序执行的同时进行回收操作,从而减少了停顿的频率和时间。

GC(垃圾回收) 导致的性能和内存问题的大小取决于多个因素,包括垃圾回收算法的选择、垃圾回收的频率和停顿时间等。


1.性能问题:GC会在程序运行时自动回收不再使用的内存,但这个过程需要消耗一定的计算资源。垃圾回收的频率和停顿时间会对程序的性能产生影响。频繁的垃圾回收会导致程序的执行速度变慢,因为大量的计算资源被用于垃圾回收而无法用于实际的业务逻辑。此外,垃圾回收过程中的停顿时间会导致程序的响应性下降,特别是在需要实时性能或低延迟的场景下。


2.内存问题:GC会自动回收不再使用的内存,但是在回收之前,这些内存仍然被占用。因此,GC可能会导致程序的内存占用变大。此外,GC的回收过程可能会导致内存碎片化,使得内存的利用效率降低。


可能有这些问题的部分发生场景:


1.游戏开发:在游戏开发中,需要保持稳定的帧率和低延迟,以提供流畅的游戏体验。如果GC频繁触发或停顿时间过长,会导致游戏卡顿或掉帧,影响游戏的流畅度和响应性能。


2.实时系统:在实时系统中,需要保证任务的实时性能,即任务必须在规定的时间内完成。如果GC的停顿时间过长,可能会导致任务无法按时完成,影响系统的实时性能。


3.金融交易系统:在金融交易系统中,需要保证交易的低延迟和高吞吐量。如果GC频繁触发或停顿时间过长,可能会导致交易执行时间延长,影响交易的实时性能和系统的吞吐量。


4.大规模数据处理:在处理大规模数据时,GC的内存占用可能会变得很大,导致系统的内存资源不足。此外,GC的停顿时间可能会影响数据处理的效率和响应性能。


好了我们了解到了GC存在的一些问题,接下来,我们将了解 rust 是通过怎样的思想来避免它的。


贴一个体验不错的学习链接恰饭:学习链接

目录
相关文章
|
5月前
|
存储 Rust
【Rust】——所有权规则、内存分配
【Rust】——所有权规则、内存分配
|
2月前
|
存储 Rust 安全
30天拿下Rust之所有权
在编程语言的世界中,Rust凭借其独特的所有权机制脱颖而出,为开发者提供了一种新颖而强大的工具来防止内存错误。这一特性不仅确保了代码的安全性,还极大地提升了程序的性能。在Rust中,所有权是一种编译时检查机制,用于追踪哪些内存或资源何时可以被释放。每当一个变量被赋予一个值(比如:字符串、数组或文件句柄)时,Rust会确定这个变量是否“拥有”这个值,拥有资源的变量负责在适当的时候释放这些资源。
35 5
|
3月前
|
存储 Rust 安全
【Rust学习】04_所有权
所有权是 Rust 最独特的特性,对语言的其余部分有着深远的影响。它使 Rust 能够在不需要垃圾收集器的情况下保证内存安全,因此了解所有权的运作方式非常重要。在本章中,我们将讨论所有权以及几个相关功能:借用、切片以及 Rust 如何在内存中布局数据。
21 1
|
4月前
|
Rust Linux iOS开发
【Rust学习】01_入门准备
让我们开始您的 Rust 之旅吧!有很多东西要学,但每一段旅程都是从第一步开始的,在本章中,我们将一起来学习以下知识点: - 在 Linux、macOS 和 Windows 上安装 Rust - 编写打印程序 Hello, world! - 使用 cargo Rust 的包管理器和构建系统
74 1
|
4月前
|
Rust 安全 开发者
Rust引用、借用和所有权详解
Rust引用、借用和所有权详解
|
4月前
|
Rust 开发者
Rust函数入门与函数重载
Rust函数入门与函数重载
103 0
|
5月前
|
Web App开发 Rust 安全
一名C++程序员的Rust入门初体验
作者最近尝试写了一些Rust代码,本文主要讲述了对Rust的看法和Rust与C++的一些区别。
|
5月前
|
Rust 算法 开发者
【Rust 控制流入门指南】 Introduction to Control Flow in Rust
【Rust 控制流入门指南】 Introduction to Control Flow in Rust
52 0
|
5月前
|
Rust 算法 安全
【Rust中的所有权系统深入解析】A Deep Dive into Rust‘s Ownership System
【Rust中的所有权系统深入解析】A Deep Dive into Rust‘s Ownership System
89 0
|
5月前
|
Rust 安全 编译器
深入Rust的所有权系统:理解变量的所有权
本文详细探讨了Rust编程语言中所有权系统的核心概念,包括变量的所有权、生命周期、借用规则和内存安全。通过理解这些概念,我们能够编写出更加高效、安全和可维护的Rust代码。