go语言互联网时代的

go语言互联网时代的

ID:36302024

大小:545.81 KB

页数:29页

时间:2019-05-08

go语言互联网时代的_第1页
go语言互联网时代的_第2页
go语言互联网时代的_第3页
go语言互联网时代的_第4页
go语言互联网时代的_第5页
资源描述:

《go语言互联网时代的》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、Go语言:互联网时代的CGoogolLee@googollee2010.04.25Beta技术沙龙http://club.blogbeta.com官方twitter:@betasalonGroups:http://groups.google.com/group/betasalonKenThompsonSummery系统级开发现状新需求需要新模型Go对并发的支持Go的语法特点系统测开发现状要求高并发要求开发速度要求性能好要求可分布系统测开发现状C/C++写的好的话速度快,内存利用率高写不好的话内存泄露Coredump语言层面完

2、全没有对并发有支持裸用os的并发机制:线程/进程系统测开发现状Java速度快,语言不灵活语言层面有一定的并发支持,基于os并发机制PHP/Python/Ruby开发速度快,灵活速度慢语言层面依旧裸用os的并发机制,甚至不提供或者有限制(GIL)Twisted/asyncore/Multiprocess能否开发快,性能高?新模型新的编程模型(CSP)在语言层面加入对并发支持而不是以库形式提供更高层次的并发抽象而不是直接暴露os的并发机制应用ErlangOcamlGO并发模型GoroutineChannelRpc内存模型并发模型-goroutine轻量Goroutine

3、间是并行的底层混合使用非阻塞IO和线程关键字:go并发模型-channel通过通信来共享而不是通过共享来通信对channel的读写是阻塞的读阻塞到读出内容写阻塞到内容写入bufferchannel的两个功能传值同步例子-筛法求素数例子funcgenerate(chchanint){fori:=2;;i++{ch<-i//Send'i'tochannel'ch'.}}funcfilter(in,outchanint,primeint){for{I:=<-in//Receivevalueofnewvariable'i'from'in'.ifi%prime!=0{out<

4、-i//Send'i'tochannel'out'.}}}funcmain(){runtime.GOMAXPROCS(1);ch:=make(chanint)//Createanewchannel.gogenerate(ch)//Startgenerate()asagoroutine.for{prime:=<-chfmt.Println(prime)ch1:=make(chanint)gofilter(ch,ch1,prime)ch=ch1}}例子-续Strace结果:并发手段:有Println:有一次clone,占用一个core可以在write时继续进行计算需要f

5、utex做同步没有Println:没有clone,占用一个core在chan读写时切换goroutine没有同步信号量select同时监听多个channelfor{//loopforeverselect{casereq:=<-service:…//processtherequestcase<-quit:return;//quitloop}}RPC远程调用使用golang库gob作序列化目前只能用http做serverhttp使用长链接限制gob不能序列化函数和channel例子typeClassstruct{}func(p*Class)Function(a*Args

6、,r*Reply)os.Error//serverfuncmain(){a:=new(module.Class);rpc.Register(a);rpc.HandleHTTP();l,e:=net.Listen("tcp",":1234");http.Serve(l,nil);}//clientfuncmain(){client,err:=rpc.DialHTTP("tcp","127.0.0.1:1234");args:=&module.Args{7,8};reply:=new(module.Reply);err=client.Call("Class.Functi

7、on",args,reply);}内存模型简化并发编程必须有GC参与单件如何释放初始化Importpackage的init包间顺序不定包里goroutine在所有init之后才执行Mainpackage的main内存模型原子IO对变量的读写都是原子的c/c++的变量读写都不是原子的乱序仅保证在goroutine内,乱序后执行结果不变once安全的初始化手段Lock用channel更好语法细节-原则简化语法混合了C和Python便于解析加快编译速度语法细节–值vs引用值类型创建基本类型字面量:0,1.1,'c',”string”,[3]int{1,2,3}/[..

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。