memory 译文
原文
内存资源控制器
注意:这份文件已经过时了,它要求提供完整的信息改写。它仍然包含有用的信息,因此我们在这里保留它,但如果您需要更深入的了解,请务必检查当前最新代码。
注意:本文档中内存资源控制器通常被称为内存控制器。不要混淆这里的内存控制器和硬件中使用的内存控制器。
(对于编辑)在本文档中: 当我们提到带有内存控制器的cgroup(cgroupfs的文件夹)时,我们称之为“memory cgroup”。当你看到 git-log 和源代码时,你会看到补丁的标题和函数名称倾向于使用“memcg”。在本文档中,我们避免使用它。
内存控制器的优点和用途内存控制器隔离一组来自系统的其余部分任务的内存行为。LWN 上的文章提到了一些可能的内存控制器的用法。内存控制器可用于:
隔离一个应用程序或一组应用程序。内存消耗大的应用程序可以被隔离并限制在较小的内存使用量范围内.
创建一个内存有限的cgroup;这个可以用作启动是调用参数 mem=XXXX 的一个很好的替代方案。
虚拟化解决方案可以控制他们想要分配给虚拟机实例的内存量。
CD/DVD 刻录机可以控制系统的其余部分所使用的内存量 ...
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 ...