Hello 算法 1.2.0 繁体中文 Go 版記憶體是所有程式的共享資源,當某塊記憶體被某個程式佔用時,則通常無法被其他程式同時使用了。因此 在資料結構與演算法的設計中,記憶體資源是一個重要的考慮因素。比如,演算法所佔用的記憶體峰值不應 超過系統剩餘空閒記憶體;如果缺少連續大塊的記憶體空間,那麼所選用的資料結構必須能夠儲存在分散的 記憶體空間內。 如圖 3‑3 所示,物理結構反映了資料在計算機記憶體中的儲存方式,可分為連續空間儲存(陣列)和分散空 型別使用 UTF‑16 編碼,每個字元佔用 2 位元組。這是因為 Java 語言設計之初,人們 認為 16 位足以表示所有可能的字元。然而,這是一個不正確的判斷。後來 Unicode 規範擴展到了超 過 16 位,所以 Java 中的字元現在可能由一對 16 位的值(稱為“代理對”)表示。 ‧ JavaScript 和 TypeScript 的字串使用 UTF‑16 編碼的原因與 Java 類似。當 Microsoft 設計的,而 Microsoft 的很多技術(包 括 Windows 作業系統)都廣泛使用 UTF‑16 編碼。 由於以上程式語言對字元數量的低估,它們不得不採取“代理對”的方式來表示超過 16 位長度的 Unicode 字元。這是一個不得已為之的無奈之舉。一方面,包含代理對的字串中,一個字元可能佔用 2 位元組或 4 位 元組,從而喪失了等長編碼的優勢。另一方面,處理代理對需要額外增加程式碼,這提高了程式設計的複雜0 码力 | 385 页 | 18.80 MB | 10 月前3
2.1.3 如何用Go模拟CPU这么看现在的厨子是不是超良心 Go模拟Apple II • 模拟Apple II 规格 • CPU (MOS 6502) • 内存(64KiB) • 显示(LoRes 40x24) • 输入(内置键盘) • 存储(磁带/5.25英寸) • 早期内存非常昂贵 • 4KiB = 5,543 USD (2020) • 64KiB = 11,266 USD (2020) • 这么看现在的厨子是不是超良心 • 真果粉应该搞一套Apple0 码力 | 42 页 | 7.10 MB | 1 年前3
微服务容灾治理& done; wait}; fs' ,⽤来并⾏执⾏给定命令指定的次数 • 可以看到系统总共只处理了⼤概500qps的请求,其中400qps多⼀点是成功的,近100qps是超 时的(返回了503状态码) • 随着请求的堆积,很快就会⼤量请求都超时了,并且p99,甚⾄p90都已经超过1s了 • 这⾥进⼀步解释⼀下,超时的请求意味着对系统资源的浪费,⽐如接受到⼀个请求,花了不少cpu 的场景来说,刚好可以反应CPU变化趋势的同时也消除了CPU⽑刺,避免⼀次⼩的抖动触发了过载 保护。简单的理解滑动平均就是取之前的N个值的平均值。 go-zero⾥对于滑动平均的超参 beta 取值0.95,相当于最后20个值( 1 / (1-0.95) = 20 ) 的均值,所以CPU达到90%后约5秒会触发过载保护。 3.2系统容量计算 容0 码力 | 13 页 | 1.68 MB | 1 年前3
1.每秒百万数据点 Go 应用监控系统演进架构优化 Querier Query-Frontend Store Gateway S3 Store Gateway Store Gateway Redis 2022 年底面临的问题 ● 超 100+ 倍数据点增长导致查询缓慢 ● 架构复杂,参数调优困难 ● 频繁 OOM ● 集群规模受制于 Prometheus ● 集群成本上升 2023 压测结果 VS ● CPU 使用低0 码力 | 42 页 | 2.32 MB | 1 年前3
2.1.1 Golang主动式内存缓存的优化探索之路言 专 用 、 高 效 适 合 专 用 的 特 殊 场 景 MsgPack 通 用 、 跨 语 言 、 跨 架 构 适 合 协 议 、 传 输 、 存 储 MemoryTile序列化性能提升超2倍 MemoryTile反序列化性能提升近10倍 基于MemoryTile的映射,特殊场景反序列化性能提升近600倍 主动式内存缓存框架 第三部分 技术全景图 01. 主动式内存缓存架构的技术全景图0 码力 | 48 页 | 6.06 MB | 1 年前3
Go性能优化概览-曹春晖https://golearn.coding.net/p/gonggongbanji/files/all/DF47 CPU 使⽤太⾼了-GC 使⽤ CPU 过⾼ • 调⼤ GOGC • 程序启动阶段 make ⼀个全局的超⼤ slice(如 1GB) 这种⽅式只适合那些内存不紧张,且希望提⾼整体吞吐量的服务 内存占⽤过⾼-堆分配导致内存过⾼ 实例分析,TLS 的 write buffer 瓶颈优化过程 https://github0 码力 | 40 页 | 8.69 MB | 1 年前3
Golang 101(Go语言101 中文版) v1.21.a值的 动态值和动态类型均为不存在。 一个接口类型可以指定若干个(可以是零个)方法,这些方法形成了此接口类 型的方法集。 如果一个类型(可以是接口或者非接口类型)的方法集是一个接口类型的方法 集的超集,则我们说此类型实现(第23章)了此接口类型。 接口(第23章)一文详细解释了接口类型和接口值。 概念:一个值的具体类型(concrete type)和 具体值(concrete value) SetPages(pages int) 方法集中的方法描述的次序并不重要。 对于一个方法集,如果其中的每个方法描述都处于另一个方法集中,则我们说 前者方法集为后者(即另一个)方法集的子集,后者为前者的超集。 如果两 个方法集互为子集(或超集),则这两个方法集必等价。 给定一个类型T,假设它既不是一个指针类型也不是一个接口类型,因为上一 节中提到的原因,类型T的方法集总是类型*T的方法集的子集。 比如,在上面 的 似地,如果两个接口类型的类型集相同,则它们相互实现了对方。 事实上, 两个拥有相同类型集的无名接口类型为同一个接口类型。 如果一个(接口或者非接口)类型T实现了一个接口类型X,那么类型T的方法 集肯定是接口类型X的方法集的超集。 一般说来,反之并不成立。但是如果X 是一个基本接口类型,则反之也成立。 比如,在前面的例子中,别名 ReadWriteCloser表示的接口类型实现了预声明的error接口类型。 在Go中,实现关系是隐式的。0 码力 | 821 页 | 956.82 KB | 1 年前3
Golang 101(Go语言101 中文版) v1.21.a值的动 态值和动态类型均为不存在。 一个接口类型可以指定若干个(可以是零个)方法,这些方法形成了此接口类 型的方法集。 如果一个类型(可以是接口或者非接口类型)的方法集是一个接口类型的方法 集的超集,则我们说此类型实现(第23章)了此接口类型。 接口(第23章)一文详细解释了接口类型和接口值。 概 念 : 一 个 值 的 具 体 类 型 ( concrete type ) 和 具 体 值 ( SetPages(pages int) 方法集中的方法描述的次序并不重要。 对于一个方法集,如果其中的每个方法描述都处于另一个方法集中,则我们说 前者方法集为后者(即另一个)方法集的子集,后者为前者的超集。 如果两个 方法集互为子集(或超集),则这两个方法集必等价。 给定一个类型T,假设它既不是一个指针类型也不是一个接口类型,因为上一节 中提到的原因,类型T的方法集总是类型*T的方法集的子集。 比如,在上面的 例子 地,如果两个接口类型的类型集相同,则它们相互实现了对方。 事实上,两个 拥有相同类型集的无名接口类型为同一个接口类型。 如果一个(接口或者非接口)类型T实现了一个接口类型X,那么类型T的方法集 肯定是接口类型X的方法集的超集。 一般说来,反之并不成立。但是如果X是一 个 基 本 接 口 类 型 , 则 反 之 也 成 立 。 比 如 , 在 前 面 的 例 子 中 , 别 名 ReadWriteCloser表示的接0 码力 | 608 页 | 1.08 MB | 1 年前3
go web 框架 严清Any(any interface{}) (val interface{}, err error) func (ctx *Context) SetAny(key, val interface{}) 超约原⽣生 context 的 *gear.Context 强⼤大、实⽤用的 HTTP 操作语法糖 // 定义符合⾃自⼰己业务需求的 Session 结构 type Session struct {0 码力 | 23 页 | 333.12 KB | 1 年前3
Golang 101(Go语言101 中文版) v1.21.a的动态值和动态类 型均为不存在。 一个接口类型可以指定若干个(可以是零个)方法,这些方法形成了此接口类型的 方法集。 如果一个类型(可以是接口或者非接口类型)的方法集是一个接口类型的方法集的 超集,则我们说此类型实现(第23章)了此接口类型。 接口(第23章)一文详细解释了接口类型和接口值。 概念:一个值的具体类型(concrete type)和具 体值(concrete value) SetPages(pages int) 方法集中的方法描述的次序并不重要。 对于一个方法集,如果其中的每个方法描述都处于另一个方法集中,则我们说前者 方法集为后者(即另一个)方法集的子集,后者为前者的超集。 如果两个方法集互 为子集(或超集),则这两个方法集必等价。 给定一个类型T,假设它既不是一个指针类型也不是一个接口类型,因为上一节中 提到的原因,类型T的方法集总是类型*T的方法集的子集。 比如,在上面的例子 如果两个接口类型的类型集相同,则它们相互实现了对方。 事实上,两个拥有相同 类型集的无名接口类型为同一个接口类型。 如果一个(接口或者非接口)类型T实现了一个接口类型X,那么类型T的方法集肯 定是接口类型X的方法集的超集。 一般说来,反之并不成立。但是如果X是一个基 本接口类型,则反之也成立。 比如,在前面的例子中,别名ReadWriteCloser表 示的接口类型实现了预声明的error接口类型。 在Go中,实现关系是隐式的。0 码力 | 591 页 | 21.40 MB | 1 年前3
共 14 条
- 1
- 2













