Go 语言高并发实战课件.ppt

  1. 1、本文档共45页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 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

文档评论(0)

叮当文档 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档