Golang 101(Go语言101 中文版) v1.21.a顺便介绍了类型不确定值和类型推断 第8章:运算操作符 - 顺便介绍了更多的类型推断规则 第9章:函数声明和调用 第10章:代码包和包引入 第11章:表达式、语句和简单语句 第12章:基本流程控制语法 第13章:协程、延迟函数调用、以及恐慌和恢复 Go类型系统 第14章:Go类型系统概述 - 精通Go编程必读 第15章:指针 第16章:结构体 第17章:值部 - 为了更容易和更深刻地理解Go中的各种值 第18章:数组、切片和映射 不同于继承的类型扩展方式 第25章:非类型安全指针 第26章:泛型 - 如何使用和解读组合类型 第27章:反射 - reflect标准库包中提供的反射支持 一些专题 第28章:代码断行规则 第29章:更多关于延迟函数调用的知识点 第30章:一些恐慌/恢复用例 第31章:详解panic/recover原理 - 也解释了什么是“函数退出阶段” 第32章:代码块和标识符作用域 目录 2 第33章:表达式估值顺序规则 支持多态(polymorphism)。 使用接口(interface)来实现裝盒(value boxing)和反射 (reflection)。 支持指针。 支持函数闭包(closure)。 支持方法。 支持延迟函数调用(defer)。 支持类型内嵌(type embedding)。 支持类型推断(type deduction or type inference)。 内存安全。 自动垃圾回收。 良好的代码跨平台性。0 码力 | 591 页 | 21.40 MB | 1 年前3
Golang 101(Go语言101 中文版) v1.21.a顺便介绍了类型不确定值和类型推断 第8章:运算操作符 - 顺便介绍了更多的类型推断规则 第9章:函数声明和调用 第10章:代码包和包引入 第11章:表达式、语句和简单语句 第12章:基本流程控制语法 第13章:协程、延迟函数调用、以及恐慌和恢复 Go类型系统 第14章:Go类型系统概述 - 精通Go编程必读 第15章:指针 第16章:结构体 第17章:值部 - 为了更容易和更深刻地理解Go中的各种值 第18章:数组、切片和映射 不同于继承的类型扩展方式 第25章:非类型安全指针 第26章:泛型 - 如何使用和解读组合类型 第27章:反射 - reflect标准库包中提供的反射支持 一些专题 第28章:代码断行规则 第29章:更多关于延迟函数调用的知识点 第30章:一些恐慌/恢复用例 第31章:详解panic/recover原理 - 也解释了什么是“函数退出阶段” 第32章:代码块和标识符作用域 第33章:表达式估值顺序规则 第34章:值复制成本 支持多态(polymorphism)。 使用接口(interface)来实现裝盒(value boxing)和反射(reflection)。 支持指针。 支持函数闭包(closure)。 支持方法。 支持延迟函数调用(defer)。 支持类型内嵌(type embedding)。 支持类型推断(type deduction or type inference)。 内存安全。 自动垃圾回收。 良好的代码跨平台性。0 码力 | 608 页 | 1.08 MB | 1 年前3
Golang 101(Go语言101 中文版) v1.21.a顺便介绍了类型不确定值和类型推断 第8章:运算操作符 - 顺便介绍了更多的类型推断规则 第9章:函数声明和调用 第10章:代码包和包引入 第11章:表达式、语句和简单语句 第12章:基本流程控制语法 第13章:协程、延迟函数调用、以及恐慌和恢复 Go类型系统 第14章:Go类型系统概述 - 精通Go编程必读 第15章:指针 第16章:结构体 第17章:值部 - 为了更容易和更深刻地理解Go中的各种值 第18章:数组、切片和映射 不同于继承的类型扩展方式 第25章:非类型安全指针 第26章:泛型 - 如何使用和解读组合类型 第27章:反射 - reflect标准库包中提供的反射支持 一些专题 第28章:代码断行规则 第29章:更多关于延迟函数调用的知识点 第30章:一些恐慌/恢复用例 第31章:详解panic/recover原理 - 也解释了什么是“函数退出阶段” 第32章:代码块和标识符作用域 第33章:表达式估值顺序规则 第34章:值复制成本 支持多态(polymorphism)。 使用接口(interface)来实现裝盒(value boxing)和反射(reflection)。 支持指针。 支持函数闭包(closure)。 支持方法。 支持延迟函数调用(defer)。 支持类型内嵌(type embedding)。 支持类型推断(type deduction or type inference)。 内存安全。 自动垃圾回收。 良好的代码跨平台性。0 码力 | 821 页 | 956.82 KB | 1 年前3
Go性能优化概览-曹春晖按照不同的情况 选择不同的⽅案 线上⼀定要开 pprof 如果有安全考虑 那也⼀定要有能通过配置开启的能⼒ CPU ⽤爆了?90%? 内存⽤爆了?OOM? Goroutine ⽤爆了?80w? 线程数爆了? 延迟太⾼? 压测时关注哪些服务指标 压测时关注哪些服务指标 因为我们是 Go 的服务,还可以额外看看: • Goroutine 数,线程数 • 如果 Goroutine 数很多,那这些 Goroutine 960f16255c36d1b381cda9e7/ prometheus/go_collector.go#L45 基本套路 1. 排除外部问题,例如依赖的上游服务(包括 DB、redis、MQ)延迟 过⾼,在监控系统中查看 2. CPU 占⽤过⾼ -> 看 CPU profile -> 优化占⽤ CPU 较多的部分逻 辑 3. 内存占⽤过⾼ -> 看 prometheus,内存 RSS goroutine 都在⼲什 么 -> 查死锁、阻塞等问题 -> 个别不在意延迟的选择第三⽅库优 化 压测⼿段 公司内部压测平台 全链路压测 阻塞导致⾼延迟 在后端系统开发中,锁瓶颈是较常⻅的问题,⽐如⽂件锁 阻塞导致⾼延迟 还有⼀些公司的 metrics 系统设计,本机上会有 udp 通信 阻塞导致⾼延迟 锁瓶颈的⼀般优化⼿段: • 缩⼩临界区:只锁必须锁的对象,临界区内尽量不放慢操作,如0 码力 | 40 页 | 8.69 MB | 1 年前3
2-6-Golang 在 Baidu-FrontEnd 的应用-陶春华分布式架构 GC带来的问题 –GC是个好东西,但也有问题 –难以避免的延迟(几十到几百ms) • 经验公式:10万对象1ms 扫描时间 –1个tcp连接,约10个对象=> 1万连接,1ms gc延迟 • GO-BFE的实时需求 –请求的处理延迟 平均1ms以内,最大10ms • 实测 –100万连接,400ms gc延迟 GC优化思路 • Go的gc算法(go1.3) –Mark and –主动调用GC GC优化 – 补充分析 • HTTP场景 –短连接 –长连接 • 平均连接上的请求是3个 • 90%(20s以内)、98%(50s之内) –大文件请求 • 对gc造成的延迟(几十ms)不敏感 多说一句Go 1.5/1.6:没有银弹 • Stop-The-World(STW)缩短了,决定因素也变了 –Time spent looping over goroutines Dict • 问题: – 变更频率 – 启停速度 – 功能单一,各自扩展 • 同步/异步,开发效率4:1 BFE BGW RS cache dict 总结 • Go可以用于高并发、低延迟的程序开发 • Go极大的提升了开发效率0 码力 | 35 页 | 730.17 KB | 1 年前3
IPC性能极致优化方案-RPAL落地实践function call remote call 方案诞生的背景 微服务合并形态:sidecar 进程通信 方案诞生的背景 微服务合并形态:亲和性部署 方案诞生的背景 怎么放大本地通信的优势? 低延迟 提升用户体验 低开销 降低计算成本 常见的本地通信方案:回环 IP、UDS、共享内存IPC 方案诞生的背景 以性能较优的 IPC 方案 share memory ipc 为例分析性能瓶颈: 第三部分 用户态进程切换 传统线程切换 rpal线程切换: 用户态进程切换 用户态进程切换 延迟进程切换 1.发生 Kernel Entry 时,sender 线程将 pt_regs(保存 Kernel 返回到用户态的 上下文信息)压入 sender 线程内核栈 用户态进程切换 延迟进程切换 2. 判断 fsbase 寄存器保存的地址是否 在 kernel current task 地址 空间内? > 若不是,代表当前在RPAL Call, 将 pt_regs 拷贝并覆盖掉之前处于 epoll_wait 上下文的 receiver 线程的内 核栈中 用户态进程切换 延迟进程切换(lazy switch) 用户态切换时还需要保留一个操作: > sender线程将自身线程上下文拷贝一 个副本,并允许kernel访问该副本。 3. sender 线程在 lazy_switch0 码力 | 39 页 | 2.98 MB | 1 年前3
基于Go的大数据平台-党合萱多种上下游适配 • ⾼高吞吐/低延迟问题探究 • ⾼高可⽤用与⽔水平扩展 • ⾃自动化运维 • Go的应⽤用 简单 · 可信赖 系统设计分析与架构 构建系统的挑战 export service系统全貌 简单 · 可信赖 多种上下游适配 简单 · 可信赖 业务架构 简单 · 可信赖 导出模型 简单 · 可信赖 ⾼高吞吐/低延迟问题探究 简单 · 可信赖 困难 简单 热点所在 • 另⼀一⽅方⾯面依靠服务⾃自身的状态反馈实时微调,修正宏观 预测结果 简单 · 可信赖 线上系统现状 • 每⽇日处理理超过千亿数据点 • 每⽇日处理理百TB级别的数据量量 • 线上导出延迟在1分钟以内 • 较少的⼈人⼯工介⼊入 • 秒级扩容 • 实时的可视化监控系统 • 易易⽤用的报警系统 • ⾃自动⽣生成线上⽇日报 简单 · 可信赖 Go的应⽤用 我们⽤用Golang做了了些什什么0 码力 | 34 页 | 1.26 MB | 1 年前3
Go基础语法宝典map 这三种类型的实现机制类似指针,所以可以直接传递,而不用 取地址后传递指针。(注:若函数需改变 slice 的长度,则仍需要取地址传递指针) defer Go语言中有种不错的设计,即延迟(defer)语句,可以在函数中添加多个defer语句。当函数执行到最 后时,这些defer语句会按照逆序执行,最后该函数返回。特别是当进行一些打开资源的操作时,遇到错 误需要提前返回,在返回前 的东西。这是个强大 的工具,请明智地使用它。 Panic 是一个内建函数,可以中断原有的控制流程,进入一个 panic 状态中。当函数 F 调用 panic ,函数F的 执行被中断,但是 F 中的延迟函数会正常执行,然后F返回到调用它的地方。在调用的地方, F 的行为就 像调用了 panic 。这一过程继续向上,直到发生 panic 的 goroutine 中所有调用的函数返回,此时程 序退出。 可以直接调用 panic 产生。也可以由运行时错误产生,例如访问越界的数组。 Recover 是一个内建的函数,可以让进入 panic 状态的 goroutine 恢复过来。 recover 仅在延迟函数中有效。 在正常的执行过程中,调用 recover 会返回 nil ,并且没有其它任何效果。如果当前的 goroutine 陷 入 panic 状态,调用 recover 可以捕获到 panic0 码力 | 47 页 | 1020.34 KB | 1 年前3
大规模高性能区块链架构设计模式与测试框架-李世敬节点1 节点2 节点3 节点4 节点5 节点6 分区B 分区A 数据块 区块链平台关键技术-分区机制 19 趣链科技 版权所有 ©2016-2021 RBFT: 5w+TPS/毫秒级 延迟⾼性能⾼鲁棒性共识算法 NoxBFT : ⽀持1000+节点 的⼤规模⾼性能共识算法 失效恢复&动态准⼊ 新节点 全⽹共识 发起请求 验证更新 l ⾃研Recovery机制,实现动态数据失效恢复 ©2016-2021 26 趣链科技 版权所有 ©2016-2021 26 区块链性能测试工具-产品基础模型 测试 平台 Hyperchain 测试脚本 可视化⼯具 交易成功率 交易吞吐量 交易延迟 … 压测指标 Fabric Ethereum … 测试脚本 测试脚本 27 趣链科技 版权所有 ©2016-2021 27 趣链科技 版权所有 ©2016-2021 27 趣链科技 版权所有0 码力 | 39 页 | 56.58 MB | 1 年前3
Go Web编程p这三种类型的实现机制类似指针,所以可以直接传递,而不用取地址后传递 指针。(注:若函数需改变slice的长度,则仍需要取地址传递指针) defer defer Go语言中有种不错的设计,即延迟(defer)语句,你可以在函数中添加多个defer语句。当函数执行到最后时,这些 defer语句会按照逆序执行,最后该函数返回。特别是当你在进行一些打开资源的操作时,遇到错误需要提前返回, 在返回 断,但是F中的延迟函数会正常执行,然后F返回到调用它的地方。在调用的地方,F的行为就像调用了panic。这一 过程继续向上,直到发生panic的goroutine中所有调用的函数返回,此时程序退出。恐慌可以直接调用panic产 生。也可以由运行时错误产生,例如访问越界的数组。 Recover 是一个内建的函数,可以让进入令人恐慌的流程中的goroutine恢复过来。recover仅在延迟函数中有效。在正常 下图即是REST的架构图: 189 图8.5 REST架构图 当REST架构的约束条件作为一个整体应用时,将生成一个可以扩展到大量客户端的应用程序。它还降低了客户端和服 务器之间的交互延迟。统一界面简化了整个系统架构,改进了子系统之间交互的可见性。REST简化了客户端和服务器 的实现,而且对于使用REST开发的应用程序更加容易扩展。 下图展示了REST的扩展性: 1900 码力 | 295 页 | 5.91 MB | 1 年前3
共 22 条
- 1
- 2
- 3













