- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
4. 程序启动 基本概念:M—内核线程,G—goroutine Go 使用符号“·”分隔包与包内的成员名字 第一个 M 叫 m0,每个 M 的调度例程叫 g0 准备 runtime·m0/runtime·g0 - 准备 argc, argv - 调度器初始化(内存初始化 - m 初始化 - 注册 args, envs - 设置并行参数) - 创建并运行 runtime·main 例程(启动垃圾收集器 - main·init() - main·main()) * 。 5. 运行视角 程序由多个包构成,入口为 main 包,每个包在程序启动时按依赖顺序逐一初始化 程序内有多个 goroutine 并发运行,goroutine 通过 channel 进行同步/异步通信 自动化内存管理,不区分堆和栈 * 。 6. 深入 runtime mgc0.c:垃圾收集器 proc.c:goroutine 管理及调度 hashmap.c:Go map chan.c:channel 实现 malloc.goc:内存分配器 asm_GOARCH.s:体系结构相关功能 iface.c:Go interface symtab.c:符号表 cpuprof.c/mprof.goc:Profiling sys_GOOS.s:操作系统相关功能 thread_GOOS:内核线程统一抽象 panic:panic管理 * 。 三、实时消息推送服务的特点 * 。 摘要 长连接(多种接入协议:HTTP、TCP) 高并发(= 10,000,000) 多种发送方式(支持单播、多播、广播) 持久/非持久 准实时(200ms ~ 2s) 客户端多样性(手机端、PC 端) 同一账号多客户端同时接入 接入网络频繁变化(电信、联通……) * 。 1. 长连接 Server PUSH 的基础 HTTP Long Polling(Keep-Alive) 基于 TCP 的自定义通信协议 采用心跳来侦测对方是否还在线 * 。 2. 高并发 C10K? out 了,现在的标准是 C1000K 用户众多:各接入产品实时在线人数都在10,000,000 以上 Linux Kernel = 2.6.32, x86-64 sysctl -w fs.file-maxsysctl -w fs.nr_openlimit.conf: nofileTCP/IP 协议栈参数调优 * 。 3. 多种发送方式 点对点聊天(单播) 定点推送(多播) 全网推送(广播) * 。 4. 持久/非持久 持久消息必须保证不丢失 (需要离线存储) 非持久消息仅发给当前在线用户 * 。 5. 准实时 发一条消息,另一个人必须能很快收到 200ms ~ 2s GC 卡顿会造成巨大麻烦 * 。 6. 客户端多样性 手机、PC、平板电脑 不同的产品有不同的需求 提供机制,而非策略 * 。 7. 同一账号多客户端接入 iMessage:iPhone, iPad, MacOSX QQ:PC、手机、平板、微信 互斥(早期 QQ) 共存 策略:如何控制? * 。 8. 接入网络频繁变化 白天在电信,晚上在联通 一会儿在公司 wifi,一会儿 3G,一会儿 2G 断线,重连,断线,重连…… * 。 四、系统架构及实现细节 * 。 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 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. 垃圾收集 不想为内存泄露问题焦头烂额 朴素的实现:停顿式、标记 清除 还有很大的提升
您可能关注的文档
- E- E1000印刷自动套准系统课件.doc
- e- S- C- M帐号申请暨帐号管理操作手册-内部员工用-(- Buyer)课件.ppt
- E- S- T-2004氨氮在线自动监测仪课件.doc
- E- T- F期权波动率套利策略课件.ppt
- E-- Learning学习技术环境的标准化课件.ppt
- East- View-- U- D- B俄罗斯大全数据库简介及使用说明课件.ppt
- English-medium- Higher- Education-at-the- University-of- Macau课件.ppt
- Enneagram-九型人格课件.ppt
- Estimated- Living- Expenses-2012-2013课件.ppt
- Evaluation-of- Five- G- I- S-based- Interpolation- Techniques-for-课件.ppt
- Good-evenning- Everyone!课件.ppt
- H- Z- D- L-- J- M全自动课件.doc
- Hawaiian- Creole- English-(- H- C- E)课件.ppt
- Hebrew-to-- English- X- F- E- R- M- T- Project--- Update课件.ppt
- Hello,-everybody!课件.ppt
- How- Many- Functional- Sequences- Are- There-in- Our- Genomes课件.ppt
- How-to- Optimize- M- I- C- E- Sales,- Revenue-and- Profits-销售攻心术课件.ppt
- Human- Resource- Strategy-of- C- I- M- C-(proposal)课件.ppt
- I- C和- C- C- R简介课件.ppt
- I- N- S- P- E- C- T- I- O- N- O- F- F- U- E- L- C- L- A- D- D- I- N- G- A- N- D- M- E- T- A- L- G- A- S- K- E- T-课件.ppt
文档评论(0)