- 博客(23)
- 收藏
- 关注
原创 【早晨读书会】深入理解rust并发编程
线程是调度的单位同一进程中的多条线程将共享该进程中的全部系统资源,如虚拟地址空间,文件描述符和信号处理等等。但同一进程中的多个线程有各自的SmallTalk、Ruby、Lua、Python 等,还会有协程(英语:coroutine)更小的调度单位。协程非常类似于线程。但是协程是的,而线程典型是的。这意味着协程提供并发性而非并行性。Rust 实现并发的基本单位是线程Rust 标准库std::thread crate 提供了线程相关的函数。
2024-04-24 09:16:52
1245
1
原创 心学从0开始思考关于rust的Mod组织
rust中有几大概念package主要包括crate和cargo.toml关于mod的用法请看如下代码不难看出,为了更好的组织代码,防止lib.rs文件过大,可读性较差,并用pub mod进行声明,这样我们可以更好的对代码进行管理。编写lib的目标就是为了给别人使用我们可以选择树状逻辑去构造mod,做一个主mod,然后把同级方法在这个mod中声明,但是写在一个同级rs文件中。
2024-04-18 16:56:12
560
原创 【rust编译错误解读】
(不能访问下标index在一个Option包裹的Vec中)尝试对一个 Option 类型的值进行索引操作,而这个 Option 可能包含一个对 Vec 的引用,或者它可能是 None。在 Rust 中,你不能直接对 Option 类型的值进行索引,因为它不是序列类型(像 Vec 或数组那样)。你需要先从 Option 中提取出 Vec 的引用,然后才能对它进行索引。(_, _)
2024-04-17 18:11:43
444
原创 【rust简单工具理解】
类型,and_then 方法接受一个闭包,这个闭包接受 Option 中的值,并返回另一个 Option。如果原始的 Option 是 Some(value),and_then 会将 value 传递给闭包,闭包返回的 Option 将作为 and_then 的最终结果。类型,and_then 的行为类似,但它用于处理可能的错误。如果原始的 Result 是 Ok(value),and_then 会将 value 传递给闭包,闭包返回的 Result 将作为 and_then 的最终结果。
2024-04-17 18:11:37
796
原创 心学从0开始学习rust-十万个为什么篇章(持续更新篇章)
tokio_tungstenite::tungstenite::protocol::Message 是 Rust 编程语言中的一个类型,它来自于 tokio_tungstenite crate,是一个基于 Tokio 的 WebSocket 库。这个类型代表了 WebSocket 连接中可以发送或接收的不同类型的消息。通常,它包括以下变体:Text(String): 表示文本消息。Binary(Vec): 表示二进制消息。Ping(Vec): 表示 ping 控制帧。
2024-04-13 10:30:25
960
1
原创 rust关于tokio下的状态同步—资源共享机制
确保多个任务在一起继续执行之前,将等待彼此到达程序中的某个点。:互斥机制,确保一次最多有一个线程能够访问某些数据。:基本任务通知。Notify支持在不发送数据的情况下通知接收任务。在这种情况下,任务会唤醒并继续处理。:(读写锁)提供互斥机制,允许同时使用多个读卡器,同时只允许使用一个写入器。在某些情况下,这可能比互斥更有效。:限制并发量。信号量拥有许多许可证,任务可以请求这些许可证以进入关键部分。信号量可用于实现任何类型的限制或定界。
2024-04-11 17:23:50
1198
2
原创 心学从0开始学习tokio-Module解读-syn
用于异步上下文的同步原语Tokio程序往往被组织为一组任务,其中每个任务独立运行,并且可以在单独的物理线程上执行。该模块中提供的同步原语允许这些独立任务一起通信。
2024-04-08 13:38:06
777
原创 心学从0学习tokio+tokio翻译
tokio的开头引入了一个task的概念task可以理解为它可以在等待某些操作(如I/O操作、定时器等)完成时释放控制权,允许其他任务继续执行。这种机制使得Rust能够以的方式同时处理多个任务,从而提高程序的并发性和效率。在这个例子中,my_task是一个异步函数,它使用.await来等待some_async_operation这个异步操作的结果。#[tokio::main]宏用于设置异步运行时环境,使得我们可以在main函数中调用异步的my_task。
2024-04-07 18:02:20
872
原创 【RUST学习】测试
可以向assert!、assert_eq!、assert_ne!添加可选的自定义消息—这些自定义消息和失败消息都会打印出来—assert!:第一参数必填,自定义消息作为第二个参数。—assert_eq!和assert_ne!: 前两个参数必填,自定义消息作为第三个参数。—自定义消息参数会被传递给format!宏,可以使用{}占位符format!("hello {}!result。
2024-03-18 14:53:47
1197
1
原创 【RUST学习】生命周期
生命周期的标注不会改变引用的生命周期长度,当指定了泛型生命周期参数,函数可以接受任何带有生命周期的引用,生命周期的标注描述了多个引用的生命周期间的关系,但不影响生命周期·自持有的类型·引用:需要在每个引用上添加生命周期标注fn main(){.next()注意:切片就是引用struct字段的生命周期名:在impl后面声明在struct名后使用这些生命周期是struct类型的一部分impl块内的方法签名中:应用必须绑定于struct字段引用的生命周期,或者引用是独立的也可以。
2024-03-16 14:23:34
790
1
原创 【算法导论学习笔记】钢条切割(动态规划)
动态规划先尝试着浅浅的理解一下动态规划,动态规划像是分治的某种变形,分治法是将问题分解成相同类型的子问题然后递归求解,动态规划也是差不多的说法,但是分治的子问题是相互独立的子问题,而动态规划的子问题具有相同的子子问题,避免掉这些问题的重复求解,就是动态规划。动态规划一般用来解决最优化问题,下面的问题就是一个典型的最优化问题。钢条切割问题(python年度更新系列)给定一个长度为n的钢条,和钢条对应价格的价格表。长度i: 1 2 3 4 5 6 7 8 9 1
2022-04-26 20:22:11
332
1
原创 最小k个数
最小k个数(python年度更新系列)设计一个算法,找出数组中最小的k个数。以任意顺序返回这k个数均可。示例:输入:arr = [1,3,5,7,2,4,6,8], k = 4输出: [1,2,3,4]来源:力扣(LeetCode)链接:最小k个数这题一瞬间的想法就是直接排序这个数组,然后输出前k个值。class Solution(object): def smallestK(self, arr, k): arr.sort() list = []
2022-04-22 19:40:37
247
原创 169.多数元素(摩尔投票+分治法)
多数元素(python年度更新版)给定一个大小为 n 的数组,找到其中的多数元素。多数元素是指在数组中出现次数 大于 ⌊ n/2 ⌋ 的元素。你可以假设数组是非空的,并且给定的数组总是存在多数元素。输入:[3,2,3]输出:3来源:力扣(LeetCode)链接:多数元素摩尔投票法(会中文就能理解)本题的思路首先想到的是摩尔投票法,比如说多国混战,n人参战,存在一个国家有多于n/2的人参战时,这个国家必然获得最后的胜利。那么我们模拟这个混战的过程,用夺旗来比喻。时间复杂度为O(n),空间复
2022-04-20 16:46:42
781
原创 112.路径总和
路径总和(python年度更新系列)给你二叉树的根节点 root 和一个表示目标和的整数 targetSum 。判断该树中是否存在 根节点到叶子节点 的路径,这条路径上所有节点值相加等于目标和 targetSum 。如果存在,返回 true ;否则,返回 false 。示例 1:输入:root = [5,4,8,11,null,13,4,7,2,null,null,null,1], targetSum = 22输出:true解释:等于目标和的根节点到叶节点路径如上图所示。本题采用递归的思想,ta
2022-04-19 11:31:19
593
原创 【算法导论学习笔记】最大子数组问题(分治策略)
最大子数组问题(python年度更新系列)**输入一个整型数组,数组中的一个或连续多个整数组成一个子数组。求所有子数组的和的最大值。要求时间复杂度为O(n)。示例1:输入: nums = [-2,1,-3,4,-1,2,1,-5,4]输出: 6解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。本题用来...
2022-04-18 11:07:22
663
原创 二叉树中的最大路径和
二叉树中的最大路径和(python年度更新系列)路径 被定义为一条从树中任意节点出发,沿父节点-子节点连接,达到任意节点的序列。同一个节点在一条路径序列中 至多出现一次 。该路径 至少包含一个 节点,且不一定经过根节点。路径和 是路径中各节点值的总和。给你一个二叉树的根节点 root ,返回其 最大路径和 。输入:root = [1,2,3]输出:6解释:最优路径是 2 -> 1 -> 3 ,路径和为 2 + 1 + 3 = 6本题的主题思路是后续遍历,通过递归查找左右子树的最大
2022-04-17 10:54:03
246
1
原创 反转二叉树
反转二叉树(python年度更新系列)给你一棵二叉树的根节点 root ,翻转这棵二叉树,并返回其根节点。输入:root = [4,2,7,1,3,6,9]输出:[4,7,2,9,6,3,1]层序遍历,每次将其的孩子结点交换,如此反复即可。class Solution(object): def invertTree(self, root): if root is None: return queue = [root]
2022-04-15 11:33:28
312
2
原创 二叉树的层序遍历||
二叉树的层序遍历||(python年度更新版)示例 1:输入:root = [3,9,20,null,null,15,7]输出:[[15,7],[9,20],[3]]就像之前写的那篇博客一样,这题就是把输出逆置一下,水了水了。链接: 二叉树的层序遍历|.class Solution(object): def levelOrderBottom(self, root): """ :type root: TreeNode :rtype: Lis
2022-04-14 16:43:19
212
原创 二叉树的层序遍历
二叉树的层序遍历(python年度更新版)输入:root = [3,9,20,null,null,15,7]输出:[[3],[9,20],[15,7]]用一个size来记录每一层的节点数,以保证不同层次的结点可以分开for循环中定义的tmp使用完后会重新赋值,也就是重置。class Solution(object): def levelOrder(self, root): res = [] #用于存放最后的结果 queue = [root] whi
2022-04-14 16:35:15
896
原创 中序和先序遍历恢复二叉树
中序和先序遍历恢复二叉树python(年度更新系列)输入: preorder = [3,9,20,15,7], inorder = [9,3,15,20,7]输出: [3,9,20,null,null,15,7]这种问题的思路直接分三步走:1.通过先序遍历找出根节点:rival = preorder[0];root = TreeNode(rival)mid = inorder.index(rival)实现了找出根结点,并找出其下标index,以便于分割队列。2.分割中序和先序的队列:p
2022-04-13 09:51:02
1088
原创 中序和后续遍历恢复二叉树
中序和后序遍历恢复二叉树python(年度更新系列)输入:inorder = [9,3,15,20,7], postorder = [9,15,7,20,3]输出:[3,9,20,null,null,15,7]恢复一棵树一般是由中序+后续or先序,便于从队列的头或者尾部直接找出根结点,再利用下标二次划分子树,通过递归去求解问题。class Solution(object): def buildTree(self, inorder, postorder): if len(in
2022-04-13 09:13:47
747
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人