- 1、本文档共45页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Go 语言高并发实战课件
四、系统架构及实现细节 摘要 逻辑架构:简单至上 组件:room 组件:register 组件:saver 组件:idgenerator 组件:center 存储:redis 1. 逻辑架构:简单至上 Go 语言高并发实战 构建千万级在线的实时消息推送服务 2012.12.23 关于我 张景埕,网名 diogin(/’da??dr?n/) programmer@360 Go 语言追随者与实践者 新浪微博:/diogin diogin@ 摘要 一、为什么选用 Go 二、探究 Go 语言的实现细节 三、实时消息推送服务的特点 四、系统架构及组件细节 五、数据、经验和教训 一、为什么选用 Go 1. 高并发 一个 Go 进程可以轻易支撑几十万上百万并发运行的 Go 例程(只要你内存足够大) O(1) 的调度 5KiB/goroutine 的内存开销 net 包:pollServer (epoll/kqueue/iocp) 支持大量并发连接 fd 的事件通知,同时还支持多核并行 (目前为 8 核) select/channel 提供卓越的例程间通信能力 2. 高性能 编译为本地机器码 静态链接 (CGO_ENABLED=0) 轻量级的 runtime 实现 热点代码可以直接编写 C 或 ASM,同样静态链接进目标文件 3. 垃圾收集 不想为内存泄露问题焦头烂额 朴素的实现:停顿式、标记 清除 还有很大的提升空间 资源泄露还得自己解决 4. 低成本 学习成本低:源自 C 系,大量的 C 系程序员可以很快上手(这很重要) 运维成本低:不需要安装各种让人头疼的依赖,不需要搭建各种运行环境,部署非常方便 5. 够用的标准库 net encoding/gob strings, bytes, errors, strconv regexp os, time syscall sync ...... 6. 高移植性 多种操作系统:Linux, FreeBSD, Darwin, NetBSD, OpenBSD, Windows 多种体系结构:386, amd64, arm(v5,v6,v7) 多种目标文件格式:elf/pe/macho 7. 优秀的背景 Google, BSD License Ken Thompson, Rob Pike, Robert Griesemer, Russ Cox, Brad Fitzpatrick... 拥有强烈的 Plan 9 血统 C, Python 的风格 Alternatives? Erlang Node.js D Rust 二、探究 Go 语言的实现细节 WHY? 产品级的应用,不是玩具 在国内(甚至国外),仍处于吃螃蟹阶段 我们需要能 hold 住可能出现的各种问题 提升团队成员技术水平 回击各种针对 Go 的恶意 FUD 和各种 PK 回馈 Go 本身,积极为其做贡献 摘要 代码结构 逻辑结构 实现结构 程序启动 运行视角 深入 runtime 1. 代码结构 工具 + 标准库 include/:Go 基本工具依赖的库的头文件 src/:Go 基本工具、标准库的实现 src/cmd/:Go 基本工具及其实现 src/lib*/:Go 基本工具依赖的库的实现 src/pkg/:Go 标准库的实现 2. 逻辑结构 gc (Go 编译器)、cc (Plan 9 C 编译器)、as (Plan 9 汇编器)、ld (Plan 9 链接器)、pack (Plan 9 目标文件归档工具) 工具链一条龙 支持多种操作系统、体系结构和可执行文件格式 程序 = N 个包的合并、组合 包 = const、var、type、func dist:引导程序,负责构建 Go 基本工具 go:管理 Go 的各项功能 3. 实现结构 每个包里可以有 .go、.c、.s 文件,分别由 gc、cc、as 编译,最后统一用 ld/pack 链接并打包成静态链接库(遵循一致的 ABI) 每个 Go 程序都包含最底层的 runtime 包,runtime 实现并封装了程序的运行时环境 syscall 包封装了操作系统调用,同时与 runtime 协作进行 goroutine 调度 sync 提供了基本的并发同步原语(工具包) reflect 为应用层代码提供运行时自省能力 4. 程序启动 基本概念:M—内核线程,G—goroutine Go 使用符号“·”分隔包与包内的成员名字 第一个 M 叫 m0,每个 M 的调度例程叫 g0 准备 runtime·m0/runtime·g0 - 准备 argc, argv - 调度器初始化(内存初始化 - m 初始化 - 注册 args, envs - 设置并行参数) - 创建并运行 runtime·main
您可能关注的文档
- 5--防止人为错误课件.ppt
- 5.1我们都是公民第二课时课件.ppt
- 5s演讲稿课件.ppt
- 5、营运资金管理课件.ppt
- 5 中医经络养生课件.ppt
- 5农耕时代的商业与城市课件.ppt
- 6 电子商务的安全体系课件.ppt
- 6 结构安装工程课件.ppt
- 6sigma与服务质量管理课件.ppt
- 6、北京的春节课件.ppt
- 2024-2030年中国高性能技术纺织品行业市场现状供需分析及市场深度研究发展前景及规划战略投资分析研究报告.docx
- 2024-2030年光电元器件行业风险投资发展分析及投资融资策略研究报告.docx
- 2024-2030年光电传感器市场前景分析及投资策略与风险管理研究报告.docx
- 2024-2030年中国铁芯平衡电流互感器行业发展状况与投资前景预测报告.docx
- 2024-2030年中国金属船舶市场发展分析及市场趋势与投资方向研究报告.docx
- 2024-2030年光电吊舱行业市场现状供需分析及市场深度研究发展前景及规划投资研究报告.docx
- 2024-2030年中国长角豆籽提取物行业发展动态与未来前景预测报告.docx
- 2024-2030年光学透镜开槽器行业市场现状供需分析及市场深度研究发展前景及规划投资研究报告.docx
- 2024-2030年光电元器件市场发展分析及投资研究报告.docx
- 2024-2030年光学相机行业市场发展现状及竞争格局与投资战略研究报告.docx
文档评论(0)