Go语言及其在大并发环境下的应用.ppt_第1页
Go语言及其在大并发环境下的应用.ppt_第2页
Go语言及其在大并发环境下的应用.ppt_第3页
Go语言及其在大并发环境下的应用.ppt_第4页
Go语言及其在大并发环境下的应用.ppt_第5页
已阅读5页,还剩42页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Go语言及其在大并发环境下的应用 张景埕 关于我 程序员 360Go语言忠实追随者与实践者2010 08开始接触Go语言并喜欢上了它 hello world FAQ 什么是Go语言 Google主导开发的一门通用编程语言 BSDLUnix之父KenThompson Unix先驱RobPikeC Python Limbo 并发 编译 汇编 链接 主要是静态链接 简洁 朴素 直观的语法语法级的并发与自动化垃圾回收支持卓越的国际化与跨平台支持 FAQ 为什么要发明Go语言 计算机越来越快 软件开发速度却跟不上C C 大型项目依赖管理复杂 编译链接等操作太耗时如何充分利用多核 如何高效地进行并发编程越来越让程序员头疼没有一门现有语言同时具备快速编译 高效执行 快乐编程三个目标传统的面向对象语言太注重类型继承 过于臃肿 啰嗦内存管理 DLL地狱困扰着系统程序员 FAQ Go语言能做什么 除了编写操作系统内核及其模块之外 Go可以做各种应用级别的开发当前最适合编写各种服务器程序 Web服务器 应用服务器 游戏服务器 数据存储服务器等等 GUI桌面应用程序开发 还不成熟 手机App开发 还不成熟 教育 科学计算 FAQ Go语言的目标是什么 同时具备静态语言的运行效率 动态语言的开发效率类型安全 内存安全优秀的并发与通信能力高效 无延迟的自动化垃圾收集高速编译与静态链接丰富 高质量的包 FAQ Go在编程语言谱系中的位置 FAQ Go在编程语言谱系中的位置 FAQ Go在编程语言谱系中的位置 一 Go程序运行原理 相关工具 语言规范及标准库 1 Go程序运行原理 静态链接的二进制可执行程序 gc编译器 只依赖内核 完全不依赖libc glibc crt 意味着Go程序自己封装了系统调用 由多个包 package 联编而成 每个包在加载时进行初始化 通过init 函数 程序运行入口为main包里的main函数每个程序都带runtime包 进行运行时管理 调度 内存管理 反射 高级数据类型实现 profiling panic race管理及检测等 1 Go程序运行原理 从零开始 以linux amd64为例 大体步骤 汇编例程 rt0 amd64 linux 汇编例程 rt0 amd64 准备g和m寄存器 命令行参数初始化 OS级别的初始化 调度器初始化 内存管理系统初始化 m初始化 并行能力探测 runtime main 垃圾收集器启动 main init main main 1 Go程序运行原理 什么是g m g goroutine m machine 内核线程 externregisterG g externregisterM m 一个m上可以跑多个g 如果一个g进行阻塞式系统调用 其它g可以调度到别的m上继续运行调度器的任务就是为g选择合适的m来运行 1 Go程序运行原理 包初始化 main包依赖其它包 其它包又依赖其它包 所有的依赖形成一个有向无环图 每个包都可以有多init 函数 在main init 阶段按深度优先的方式遍历调用以初始化所有的包 直到最后初始化main包 进入main main 时 所有的包都完成了初始化 1 Go程序运行原理 程序视图 一个进程 内部多个goroutine并发运行 多个goroutine共享一个内核线程 machine goroutine间通过channel进行同步或异步通信 所有goroutine共享进程虚拟内存空间程序由多个包以无环依赖的形式联接而成 进程开始运行之前全部包已完成初始化每个包有四种元素 const var type func自动化的内存管理让进程无需手动管理内存释放 静态链接让进程无需担心动态链接库是否存在 2 相关工具 go 编译汇编链接一体化 模拟脚本解释器等在go开发过程中需要进行的各种操作godoc 一个在本地运行的http golang org官方网站镜像 方便随时查阅gofmt 鸡血工具 代码格式化 放进scm挂勾 可以让整个团队代码格式完全一致gotoolfix 在不同Go版本间自动升级代码文本编辑器 IDE 按自己的爱好自由选择 2 相关工具 Go标准目录结构 通常每个项目有多个程序一个工程师可能同时开发多个项目Go使用一个GOPATH模拟一个项目每个GOPATH有标准的目录结构 bin pkg src 3 Go语言规范概述1 语法溯源 大体上属于C系 有指针 new 有引用 make 传值 简洁 容易上手类型后置式声明 例如 variint 123 面向对象 用户定义的类型可以附加方法 功能复用采用的是组合而非继承 鸭子类型 只需提供接口声明的方法 该类型就满足接口 无需显式实现该接口 多返回值 函数可以返回多个值 错误处理不使用异常机制 而是用多返回值 3 Go语言规范概述2 内存安全 数组边界检查 堆与栈不区分 不存在C里面返回栈空间的地址等陷阱 操作不再是表达式 而成了语句内置高级数据结构 map closure严格的类型大小要求 保证跨平台性panic recover defer 对致命错误及其恢复机制的支持 对延迟调用的支持goroutine channel select 对并发的支持大小写区分包内元素对外部的可见性 3 Go语言词法元素 源代码采用UTF 8编码 Unicode6 2标准 注释 标识符 a int 关键字 if go 操作符 整数 123 0 xff 0337 浮点数 3 14 1e9 虚数 3 14i 1e9i 字符 a 中 字符串 go n 3 Go语言规范 关键字 3 Go语言例子 if语句 3 Go语言例子 for语句 3 Go语言例子 switch语句 3 Go语言例子 混合 4 标准库 部分 runtime Go程序运行时环境syscall 系统调用的封装net 网络协议栈封装net http HTTP协议封装os 跨平台操作系统API封装encoding gob Go程序进程间通信编码reflect 反射sync 同步原语strings 字符串APIbytes 字节API 其它 官方网站 http golang org 项目托管 二 Go在大并发环境下的应用 并发与并行 并发是一种程序设计模式Go语言在语法层面支持并发设计并行是一种可选的程序运行优化方法并发 并行 并发模型 多进程 多线程 事件 Nginx 多进程 每个进程单线程 异步非阻塞I O Apache prefork 多进程 每个进程单线程 同步阻塞I O PHP FPM 同Apache prefork MySQL 单进程 多线程 同步阻塞I O Memcached 单进程 多线程 异步非阻塞I ORedis 单进程 单线程 异步非阻塞I O Go的并发模型 单进程 每个进程多个goroutine 同步阻塞I O 可以有上百万个goroutine 只要你内存足够大 goroutine 运行单元 channel 通信通道 分缓冲式 非缓冲式 select语句 查看并选择可运行的通道操作 mutex rwmutex condition等等低级原语 Don tcommunicatebysharedmemory Instead sharememorybycommunicating RobPike goroutine goroutine Go的基本并发单元单个goroutine占用5KB左右的栈空间一个普通的函数 或方法 通过go关键字进行调用 就成了个goroutine没有父子之说 全部goroutine地位平等无法在应用层获取goroutineid channel channel FirstclassvalueUnbuffered 同步 buffered 异步 有向 仅接收 仅发送 或双向通道内可以发送任何firstclassvalue 包括通道自身 甚至一个函数 select select 某goroutine需要同时侦测多个channel上的事件如果没有一个channel上有事件发生 同时提供了default分支 则执行default分支 实战 实时推送服务 长连接 HTTP TCP 实时传输全双工 实现上行发送 下行接收 TCP 每个长连接三个goroutine 一个负责读 阻塞在read 一个负责写 阻塞在write 一个负责管理与协调 select 三者通过channel进行内部通信 系统组件 Room 负责对接客户端Register 负责记录哪些用户当前连接在哪个roomSaver 存储离线消息IdGenerator 消息id生成器 系统组件 room 需要一个map用来记录用户与服务它的Server实例的对应关系抽象Server接口 并用HttpServer TcpServer实现接入协议 每个Server有一个channel用于缓冲消息抽象Service层可复用API用户连接时注册在线信息到register 离线时清除定期心跳方式检测在线 系统组件 register Hash user 方式存储用户在线信息存储方式为一个HashTable 采用Gomap 提供RPC接口 传输协议为gob 性质类似redis 但方便添加逻辑 系统组件 saver 存储抽象层 封装后端存储全对称方式设计RPC gob 系统组件 i

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论