
md
文章平均质量分 84
Dominiczz
I have a big heart.
展开
-
I/O模型的一些理解
异步:把事情推到以后去做阻塞:专心做一件事情同步阻塞:马上专心做一件事情同步非阻塞:一边做一件事情,一边做另一件事情(一心二用)异步阻塞:把问题推到以后专心处理异步非阻塞:把问题推到以后时不时处理一下。原创 2024-03-28 16:29:49 · 1304 阅读 · 0 评论 -
Cell和RefCell
内部可变性的实现是因为 Rust 使用了 unsafe 来做到这一点,但是对于使用者来说,这些都是透明的,因为这些不安全代码都被封装到了安全的 API 中。用于内部可变性,简而言之,可以在拥有不可变引用的同时修改目标数据,对于正常的代码实现来说,这个是不可能做到的(要么一个可变借用,要么多个不可变借用)。的存在,我们很优雅地做到了这一点,但是如果你尝试在。变量后,还能同时进行修改,这个违背了。在功能上没有区别,区别在于。的借用规则,但是由于。编译器会立刻报错,因为。原创 2023-11-10 18:00:51 · 694 阅读 · 0 评论 -
Rc与Arc实现1vN所有权机制
并将该智能指针的引用计数增加到 2。表面原因是 Rc< T > 不能在线程间安全的传递,实际上是因为它没有实现 Send 特征,而该特征是恰恰是多线程间传递数据的关键,我们会在多线程章节中进行讲解。事实上,RC< T >是指向底层数据的不可变引用,因此你无法通过它来修改数据,因为Rust的借用规则:要么存在多个不可变借用,要么只存在一个可变借用。当然,还有更深层的原因:由于 Rc< T > 需要管理引用计数,但是该计数器并没有使用任何并发原语,因此无法实现原子化的计数操作,最终会导致计数错误。原创 2023-11-09 09:59:05 · 365 阅读 · 0 评论 -
rust学习
栈和堆都是代码在运行时可供使用的内存,但是它们的结构不同。因为指向放入堆中数据的指针是已知的并且大小是固定的,你可以将该指针存储在栈上,不过当需要实际数据时,必须访问指针。跟踪哪部分代码正在使用堆上的哪些数据,最大限度的减少堆上的重复数据的数量,以及清理堆上不再使用的数据确保不会耗尽空间,这些问题正是所有权系统要处理的。虽然 Rust 已经通过各种机制减少了上述情况的发生,但是依然无法完全避免上述情况,因此我们在编程时需要格外的小心,同时本书也会列出多线程编程时常见的陷阱,让你提前规避可能的风险。原创 2023-10-26 17:50:35 · 537 阅读 · 0 评论 -
rust闭包
现在它可以调用闭包多次,但是仍然不能例如在多个线程上并发地调用闭包,因为那会导致数据共用。但是调用者可以自由传递任何闭包,因为所有的闭包都实现了FnOnce,这是由子trait和父trait的关系决定的。实际上a是不可变string,但是test1函数可以捕获a的所有权,然后重新给了一个新的变量s,s是可变的。最后,如果被调用者接受Fn,那么它可以无限制的调用闭包,甚至并发调用。Fn trait是FnMut的子trait,FnMut trait是FnOnce的子trait。上面这段话超级重要!原创 2023-11-02 15:43:59 · 571 阅读 · 0 评论 -
Git总结
添加、提交删除历史记录、分支暂存修改远程变基。原创 2023-10-27 18:06:54 · 1352 阅读 · 0 评论 -
python笔记
python笔记1、linux的shebang符号(#!)#!这个符号叫做shebang或者sha-bangShebang通常在Unix操作系统脚本的第一行开头,代表这个执行程序的解释器使用方式1、查询python3解释器所在路径 which python32、在pyhon文件第一行增加 #!/usr/bin/python33、修改文件权限,增加可执行权限 chmod +x 文件名.py4、在需要执行时候,可以直接在命令行 ./文件名.py 以后执行的时候可以省原创 2021-10-02 19:20:03 · 104 阅读 · 0 评论