Go语言及其在大并发环境下的应用分析.pptVIP

Go语言及其在大并发环境下的应用分析.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
并发与并行 并发是一种程序设计模式 Go 语言在语法层面支持并发设计 并行是一种可选的程序运行优化方法 并发 != 并行 并发模型:多进程、多线程、事件? Nginx:多进程,每个进程单线程(异步非阻塞I/O) Apache(prefork):多进程,每个进程单线程(同步阻塞I/O) PHP-FPM:同 Apache(prefork) MySQL:单进程 + 多线程(同步阻塞I/O) Memcached:单进程 + 多线程 + 异步非阻塞 I/O Redis:单进程 + 单线程 + 异步非阻塞 I/O Go 的并发模型? 单进程,每个进程多个 goroutine(同步阻塞 I/O。可以有上百万个 goroutine,只要你内存足够大) goroutine(运行单元) channel(通信通道,分缓冲式、非缓冲式) select 语句(查看并选择可运行的通道操作) mutex, rwmutex, condition 等等低级原语 “Don’t communicate by shared memory. Instead, share memory by communicating. —— Rob Pike” goroutine goroutine Go 的基本并发单元 单个 goroutine 占用 5KB 左右的栈空间 一个普通的函数(或方法),通过 go 关键字进行调用,就成了个 goroutine 没有父子之说,全部 goroutine 地位平等 无法在应用层获取 goroutine id channel channel First class value Unbuffered(同步)、buffered(异步) 有向:仅接收、仅发送;或双向 通道内可以发送任何 first class value,包括通道自身,甚至一个函数 select Go 语言及其在大并发环境下的应用 张景埕 /diogin (@diogin) diogin@ 2012.12.08 关于我 程序员@360 Go 语言忠实追随者与实践者 2010.08 开始接触 Go 语言并喜欢上了它 hello, world FAQ:什么是 Go 语言? Google 主导开发的一门通用编程语言,BSDL Unix 之父 Ken Thompson、Unix 先驱 Rob Pike C + 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

文档评论(0)

tangtianxu1 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档