自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(12)
  • 收藏
  • 关注

原创 多线程并发编程

rust使用1:1线程模型:程序内的线程数和该程序占用的操作系统线程数相等golang使用的是M:N线程模型:在内部实现了自己的线程模型(绿色线程、协程),程序内部的 M 个线程最后会以某种映射方式使用 N 个操作系统线程去运行而绿色线程/协程的实现会显著增大运行时的大小,因此 Rust 只在标准库中提供了1:1的线程模型,用户根据需要也可以选择 Rust 中的M:N模型,这些模型由三方库提供了实现,如tokio。

2024-06-12 23:55:48 244

原创 rust学习之Weak与循环应用

或者类似的类型嵌套组合(具备内部可变性和引用计数)时,特别注意由于循环引用导致的堆栈溢出(main线程8M),造出内存泄漏。的所有内容,最终main线程操作8M,发生栈溢出。对于这类问题,我们可以使用Weak来解决。指向的内存也不会被释放,最终发生了内存泄漏。····,有上述代码我们可以看出:在创建了。这里我们创建了一个复杂的枚举类型。所指向内存不会被释放,同理可得。的调用,Rust 试图打印出。由此此我们成功创建了循环引用。它的每个值都指向了另一个。,此时引用计数会变为。

2024-05-31 00:27:42 220

原创 Rust学习之智能指针

在 Rust 中,最常见的指针类型是引用,引用本身指向某个值,不会造成性能上的额外损耗。而智能指针比引用有更复杂的数据结构,包含比引用更多的信息,例如元数据,当前长度,最大可用长度等。引用和智能指针的另一个不同在于前者仅仅是借用了数据,而后者往往可以拥有它们指向的数据。智能指针往往是基于结构体实现,它与我们自定义的结构体最大的区别在于它实现了Deref和DropDeref*TDrop动态字符串String和动态数组可以将值分配到堆上)、Rc(引用计数类型,允许多所有权存在)、Ref和。

2024-05-28 00:35:13 478

原创 深入rust类型

只能应用在数值类型上 ,在其他类型转换时需要强制转换,在某些情况下,类型是可以进行隐式强制转换的。但在匹配特征时,不会做任何强制转换(除了方法)。Rust 是强类型语言,同时也是强安全语言,它内置了一些基本类型之间的转换,如。把范围较小的类型转换成较大的类型,来避免数据超范围。特征通过​std::prelu模块提前引入到了当前作用域中,,此时就可以对其进行相应的错误处理,例如,如果要处理转换错误,那么可以使用。会尝试进行一次转换,并返回一个。

2024-05-15 00:22:28 170

原创 rust学习之迭代器

等,我们只需关注集合中的元素如何处理,而不关心如何去访问等问题。语法糖,自动把实现了该特征的数组类型转换为迭代器,最终可以直接对一个数组进行迭代。循环颇为相似,都是去遍历一个集合。在rust中,数组不是迭代器,但数组实现了。,每次消耗它一个元素,最终迭代器中将没有任何元素,只能返回。迭代器允许我们迭代一个连续的集合,例如数组、动态数组。方法,该方法控制如何从集合中取值,最终返回值的类型是。转换成迭代器后,通过调用其上的。特征,最主要的就是实现其中的。

2024-05-10 00:29:20 168

原创 rust学习之闭包closure

如果只有一个返回表达式的话,定义可以简化为:|param1| 返回表达式。虽然闭包的类型推导很好用,但是它不是泛型,这个整型去调用闭包,跟编译器之前推导的。闭包与函数最大的不同就是它的参数是通过。的形式进行声明,如果是多个参数就。上面的代码展示了非常简单的闭包。)进行相加,最终返回它们的和为。,同时捕获了作用域中的。

2024-04-26 00:35:46 169 1

转载 containerd运行时与docker、kubelet的关系

为了解耦,containerd 将系统划分成了不同的组件,每个组件都由一个或多个模块协作完成(Core 部分),每一种类型的模块都以插件的形式集成到 Containerd 中,而且插件之间是相互依赖的,例如,上图中的每一个长虚线的方框都表示一种类型的插件,包括 Service Plugin、Metadata Plugin、GC Plugin、Runtime Plugin 等,其中 Service Plugin 又会依赖 Metadata Plugin、GC Plugin 和 Runtime Plugin。

2024-04-23 19:57:31 29

原创 Rust学习杂记

str是一个不可变的固定长度的字符串,如果是从String解引用而来的,则指向堆上,如果是字面值,则指向静态内存。s的类型是&str,而“abcd”是str类型,这里的“abcd”就是字符串字面值,存放在Stack上的。s 是切片,切片是一个结构体,包含两个字段,一个是指向数据的指针,另一个是数据的长度。String 类型的字符串是分配在堆上内存的可变字节缓冲区,由内存地址、容量、当前值的长度,这三部分构成。// s[0..1] 的类型为 str是string 的切片类型,不能直接切片,

2024-03-16 00:55:15 331 1

原创 rust学习之注释及格式化输出

我们还可以为参数指定名称,让对应名称的值填充占位符,但。注释不仅仅是文档,还可以作为单元测试的用例运行,使用。代码注释方式有行注释//,块注释/* */两种。特征的 Rust 类型并没有那么多,往往需要我们自定义想要的格式化方式,对于没有实现。之外(依次填充占位符),还能让指定位置的参数去替换某个占位符,例如。文档行注释:/// ,文档块注释:/** */在 Rust 中,无法直接为外部类型实现外部特征,但可以使用。

2024-01-03 00:55:28 1727

原创 rust学习之包和模块

对于 Rust 而言,包是一个独立的可编译单元,它编译后会生成一个可执行文件或者一个库。模块可见性不代表模块内部项的可见性,模块的可见性仅仅是允许其它模块去引用它,但是想要引用它内部的项,还得继续将对应的项标记为。使用模块,我们就能将功能相关的代码组织到一起,然后通过一个模块名称来说明这些代码为何被组织在一起。目录下,每一个文件都是独立的二进制包,同时也会包含一个库包,该包只能存在一个。Rust 出于安全的考虑,默认情况下,所有的类型都是私有化的,文件,包根文件中的三个模块分别形成了模块树的剩余部分。

2023-12-21 00:18:40 1686 1

原创 rust学习之错误处理

panic可分为被动触发和主动调用,被动触发指的时由于代码本身原因发生致命错误,如数组访问越界。时,程序提供了栈展开与直接终止两种方式来处理终止流程,默认的方式就是。序会打印出一个错误信息,展开报错点往前的函数调用堆栈,最后退出程序。Rust 中的错误主要分为可恢复错误与不可恢复错误。, 但是会带上自定义的错误提示信息,相比之下,代表成功时存入的正确值的类型,存放方式是。代表错误时存入的错误值,存放方式是。它们的作用就是,如果返回成功,就将。中的值取出来,如果失败,就直接。,如果失败,且是文件不存在错误。

2023-12-20 00:36:45 396 1

原创 rust学习之生命周期

生命周期的主要作用是避免悬垂引用,它会导致程序引用了本不该引用的数据。当存在多个引用时,编译器有时会无法自动推导生命周期,此时就需要我们手动去标注,通过为参数标注合适的生命周期来帮助编译器进行借用检查的分析。生命周期标注并不会改变任何引用的实际作用域,自身并不具有什么意义,其作用只是告诉编译器多个引用之间的关系。即表示返回值的生命周期与参数生命周期中的较小值一致。开头,名称往往是一个单独的小写字母,大多数人都用。活得一样久,同时函数的返回引用也至少跟。,小于它应该具备的生命周期。的作用域的重合部分。

2023-12-08 00:30:07 1353

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除