Go语言互联网时代C.ppt

  1. 1、本文档共29页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Summery 系统级开发现状 新需求需要新模型 Go对并发的支持 Go的语法特点 系统测开发现状 要求高并发 要求开发速度 要求性能好 要求可分布 系统测开发现状 C/C++ 写的好的话 速度快,内存利用率高 写不好的话 内存泄露 Core dump 语言层面完全没有对并发有支持 裸用os的并发机制:线程/进程 系统测开发现状 Java 速度快,语言不灵活 语言层面有一定的并发支持,基于os并发机制 PHP/Python/Ruby 开发速度快,灵活 速度慢 语言层面依旧裸用os的并发机制,甚至不提供或者有限制(GIL) Twisted/asyncore/Multiprocess 能否开发快,性能高? 新模型 新的编程模型(CSP) 在语言层面加入对并发支持 而不是以库形式提供 更高层次的并发抽象 而不是直接暴露os的并发机制 应用 Erlang Ocaml GO并发模型 Goroutine Channel Rpc 内存模型 并发模型 - goroutine 轻量 Goroutine间是并行的 底层混合使用非阻塞IO和线程 关键字:go 并发模型 - channel 通过通信来共享 而不是通过共享来通信 对channel的读写是阻塞的 读阻塞到读出内容 写阻塞到内容写入buffer channel的两个功能 传值 同步 例子 - 筛法求素数 ?例子 ?例子 - 续 select 同时监听多个channel for { // loop forever select { case req := - service: … // process the request case - quit: return; // quit loop } } RPC 远程调用 使用golang库gob作序列化 目前只能用http做server http使用长链接 限制 gob不能序列化函数和channel 例子 内存模型 简化并发编程必须有GC参与 单件如何释放 初始化 Import package的init 包间顺序不定 包里goroutine在所有init之后才执行 Main package的main 内存模型 原子IO 对变量的读写都是原子的 c/c++的变量读写都不是原子的 乱序 仅保证在goroutine内,乱序后执行结果不变 once 安全的初始化手段 Lock 用channel更好 语法细节 - 原则 简化语法 混合了C和Python 便于解析 加快编译速度 语法细节 – 值 vs 引用 值类型创建 基本类型 字面量:0,1.1,c,”string”,[3]int{1,2,3}/[...] 构造 Point{1, 1} 具有引用语义的基本类型:maps,slice,channel maps,channel的值类型必须用make创建 指针 空指针:nil 没有指针运算 - 需要指针运算时应该用slice 创建 var pInt *int = someIntVar; var point *Point = Point{1, 1} 语法细节 - slice 定义方法 数组:var array [100]int slice:var slice []int slice可以对数组内任意一段做引用 slice = array[X:Y] len(slice) = Y – X cap(slice):slice实际占用的内存 取代指针,安全的数组引用 slice = array等同于slice = array[0:len(array)] 语法细节 – 类 定义方式类似C type SomeClass struct { … } func (self *SomeClass) method(...) { … } 调用方式类似C++ var class *SomeClass = SomeClass{ … } class.method( … ) 独特的继承 type Base struct { … } type Child struct { Base; … } func (p *Child) method() { p.BaseMethod( … ); } 语法细节 – 非继承 动态绑定interface type PrintInterface interface { print(); } type Printable struct { … } // no inherit here func (p *Printable) print() { … } var i PrintInterface = Printable{ … } i.print() Any 可以传入任意类型 type Any interface {} 调用方式

文档评论(0)

wuyoujun92 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档