cpuset 译文
原文
Cpusets什么是 cpusetsCpusets 提供了一种将一组 CPU 和内存节点分配给一组任务的机制。在本文中,”内存节点 “是指包含内存的联机节点。
Cpuset 将任务的 CPU 和内存位置限制在任务当前 cpuset 的资源范围内。 它们形成了虚拟文件系统中可见的嵌套层次结构。这些都是在大型系统上管理动态任务分配所需的基本钩子,超出了已有的钩子范围。
Cpusets 使用文档cgroups.txt 中描述的通用 cgroup 子系统。
使用 sched_setaffinity(2) 系统调用将 CPU 纳入 CPU 亲和性掩码(CPU affinity mask),以及使用 mbind(2) 和 set_mempolicy(2) 系统调用将内存节点纳入内存策略的任务请求,都会通过该任务的 cpuset 过滤,过滤掉不在该 cpuset 中的 CPU 或内存节点。调度程序不会在 CPU 的 cpus_allowed 向量中不允许的 CPU 上调度任务,内核页分配器也不会在请求任务的 mems_allowed 向量中不允许的节点上分配页面。
用户级代码可以在 cgrou ...
namespace 译文
原文
名称namespaces - Linux命名空间概述
描述命名空间将全局系统资源封装在一个抽象概念中。在命名空间内的进程来看,它们拥有各自独立的全局资源实例。全局资源的更改对该命名空间内的其他进程可见,但对其他的进程不可见。命名空间的一个用途就是实现容器。
本页提供了有关各种命名空间类型信息的指针,描述了相关的 /proc 文件,并总结了用于处理命名空间的API。
命名空间类型下表列出了Linux上可用的命名空间类型。表中第二列展示了在各种API中用于指定命名空间类型的标志值。第三列标识了提供命名空间类型详细信息的手册页面。最后一列是按命名空间类型隔离的资源摘要。
命名空间
标志
man page
隔离
CGroup
CLONE_NEWCGROUP
cgroup_namespaces(7)
Cgroup root directory
IPC
CLONE_NEWIPC
ipc_namespaces(7)
System V IPC, POSIX message queues
Network
CLONE_NEWNET
network_namespaces(7)
Ne ...
Decorator Pattern
装饰器模式是一种设计模式,允许将行为动态的添加到单个对象,而不影响同类中其他对象的行为。
提供了子类化之外的灵活选择。
Example在Golang中,可以使用接口和匿名函数来实现。
上面的代码中,我们定义了Printer接口以及实现了接口的结构体SimplePrinter。
然后,我们定义了BoldDecorator函数,接收一个Printer interface并返回一个Printer interface。将原来的Print()方法封装到一个新的方法中,返回用<b>括起来的新字符串。
forloop-performance
嵌套循环时不同顺序对性能的影响
看CSAPP第一课讲了这个,就做了个Go的测试。只能说确实每留意过这个会带来性能提升。(但这个具体是和一级缓存有关还是什么的等到后面再补充。)
string-concatenation-benchmark
字符串拼接的基准测试结果很明显,只有两个字符串时直接相加+还不错,数量到10个开始基本都是strings.Builder了。
123456789101112131415161718192021222324252627282930goos: linuxgoarch: amd64pkg: github.com/Guaderxx/goproj/pkg/teststrcpu: AMD Ryzen 7 5800H with Radeon Graphics BenchmarkStringCombine2/Plain-16 47900655 25.91 ns/op 2 B/op 1 allocs/opBenchmarkStringCombine2/bytes.Buffer-16 20379310 100.1 ns/op 66 B/op 2 allocs/opBenchmarkStringCombine2/fmt.Sprintf-16 ...
generics
泛型的介绍
突然想起来这部分其实一直没系统的看下。今天的每日一题又很简单,整理下。原文
介绍Go 1.18增加了泛型的支持。泛型是Go开源发布依赖的最大变化。这篇文章会介绍新的语言特性。不会覆盖到所有细节,但会触及到所有重要的点。对于更细节,更长描述,包含很多示例的文章,参见推荐文档。对于语言变化更精确的描述,见更新后的语言规范。(注意,实际的1.18实现对提案文件所允许的内容施加了一些限制;规范应准确无误,未来的版本可能会取消部分限制。(现在都1.21.1了,直接看新的就行。)
泛型是一种编写独立于所使用的特定类型的代码的方法。现在可以写函数和类型来使用一组类型中的任何一个。
泛型在语言中增加了三个新的大事:
函数和类型的类型参数
定义接口类型作为类型集,包括没有方法的类型
类型推断,在很多情况下允许调用函数时省略类型参数
类型参数函数和类型现在可以有类型参数。一个类型参数列表就像普通的参数列表,只不过使用方括号包含[].
为了更清楚,让我们从一个无泛型的计算浮点数值最小值的Min函数开始:
123456func Min(x, y float64) float64 { ...
lowestCommonAncestor
力扣每日一题
Lowest Common Ancestor of Deepest Leaves
很典型的一个树相关的题,倒序解,但其实解完我也不是很理解题意。
12345678910111213141516171819202122232425func lcaDeepestLeaves(root *TreeNode) *TreeNode { if root.Left == nil && root.Right == nil { return root } var postorder func(*TreeNode) (*TreeNode, int) postorder = func(node *TreeNode) (*TreeNode, int) { if node == nil { return nil, 0 } l, lDepth := postorder(node.Left) r, rDep ...
smallestNumber
力扣每日一题
2605: Form Smallest Number From Two Digit Arrays easy
虽然是简单题,错了很多遍,感觉脑子退化了
123456789101112131415161718192021222324252627func MinNumber(nums1 []int, nums2 []int) int { exists := make(map[int]bool) min1 := nums1[0] res := 11 for i := 0; i < len(nums1); i++ { exists[nums1[i]] = true if min1 > nums1[i] { min1 = nums1[i] } } min2 := nums2[0] for i := 0; i < len(nums2); i++ { if exists[nums2 ...
bst
Binary Search Tree
今天的每日一题是BST相关的,说实话,只记得叫Binary Search Tree,树相关的。我寻思整理一下吧。
Summary定义:
若任意节点的左子树不空,则左子树上所有节点的值均小于根节点的值。
若任意节点的右子树不空,则右子树上所有节点的值均大于根节点的值。
任意节点的左,右子树也分别为BST
相比其他数据结构的优势在于查找,插入的时间复杂度较低。是基础性数据结构,用于构建更抽象的数据结构:集合,多重集,关联数组等。
时间复杂度12345算法 平均 最差空间 O(n) O(n)搜索 O(log n) O(n)插入 O(log n) O(n)删除 O(log n) O(n)
查找1234567891011121314151617181920type BSTree struct { Val int Left *BSTree Right *BSTree}func SearchBST(t ...
go1.21-release-notes
GO1.21 Release Notes
前两天更新Clash,编译时候提示我要更新到1.21,正好详细看看有哪些新东西原文
介绍大部分变化体现在工具链toolchain,运行时(runtime),以及库(libraries)的实现。还有版本号的一点小变化,从N.N到N.N.N,详情查看Go versions。
语言的变化增加了三个新的内键函数。
min, max: 计算给定数的最大最小值。详情
clear: 删除一个map的所有对象或是将slice的所有对象零值化。详情
现在更精确的指定了包初始化的顺序。新的算法是:
根据导入路径排序所有的包
重复以下操作,直到包列表为空:
找到列表中所有导入已经初始化完成的第一个包
初始化该包并从列表中移除
这可能会改变某些程序的行为,因为它们依赖于特定的初始化顺序,而这种顺序并没有通过显式导入来表达。在过去的版本中,规范对此类程序的行为并没有明确定义。新规则提供了明确的定义。
已经进行了多项改进,提高了类型推断的能力和精度。
现在可以调用一个(可能部分实例化的)泛型函数,其参数本身也是(可能部分实例化的)泛型函数。编译器将尝试推断 ...