兄弟连Go语言培训清华尹成带你实战GO案例(1)Go状态协程.pdf

上传人:wj151****6093 文档编号:82115240 上传时间:2023-03-24 格式:PDF 页数:4 大小:182.90KB
返回 下载 相关 举报
兄弟连Go语言培训清华尹成带你实战GO案例(1)Go状态协程.pdf_第1页
第1页 / 共4页
兄弟连Go语言培训清华尹成带你实战GO案例(1)Go状态协程.pdf_第2页
第2页 / 共4页
点击查看更多>>
资源描述

《兄弟连Go语言培训清华尹成带你实战GO案例(1)Go状态协程.pdf》由会员分享,可在线阅读,更多相关《兄弟连Go语言培训清华尹成带你实战GO案例(1)Go状态协程.pdf(4页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、.兄弟连 Go 语言培训清华尹成带你实战 GO 案例1 Go 状态协程 Go 状态协程 在上面的例子中,我们演示了如何通过使用 mutex 来在多个协程之间共享状态。另外一种方法是使用协程 内置的同步机制来实现。这种基于通道的方法和 Go 的通过消息共享内存,保证每份数据为单独的协程所有 的理念是一致的。package main import(fmt math/rand sync/atomic time)/在这个例子中,将有一个单独的协程拥有这个状态。这样可以/保证这个数据不会被并行访问所破坏。为了读写这个状态,其/他的协程将向这个协程发送信息并且相应地接受返回信息。/这些readOp和wri

2、teOp结构体封装了这些请求和回复 type readOp struct key int resp chan int type writeOp struct key int val int .resp chan bool func main()/我们将计算我们执行了多少次操作 var ops int64=0/reads 和 writes 通道将被其他协程用来从中读取或写入数据 reads:=make(chan*readOp)writes:=make(chan*writeOp)/这个是拥有state的协程,state是一个协程的私有 map/变量。这个协程不断地select通道reads和wri

3、tes,/当有请求来临的时候进行回复。一旦有请求,首先执行所/请求的操作,然后给resp通道发送一个表示请求成功的值。go func()go func()var state=make(mapintint)for select case read:=-reads:read.resp-stateread.key case write:=-writes:write.resp-true ()./这里启动了 100 个协程来向拥有状态的协程请求读数据。/每次读操作都需要创立一个readOp,然后发送到reads/通道,然后等待接收请求回复 for r:=0;r 100;r+go func()for re

4、ad:=&readOp key:rand.Intn(5),resp:make(chan int)reads-read atomic.AddInt64(&ops,1)()/我们开启 10 个写协程 for w:=0;w 10;w+go func()for write:=&writeOp key:rand.Intn(5),val:rand.Intn(100),resp:make(chan bool)writes-write .atomic.AddInt64(&ops,1)()/让协程运行 1 秒钟 time.Sleep(time.Second)/最后输出操作数量 ops 的值 opsFinal:=atomic.LoadInt64(&ops)fmt.Println(ops:,opsFinal)运行结果 ops:880578 运行这个程序,我们会看到基于协程的状态管理每秒可以处理 800,000 个操作。对于这个例子来讲,基于 协程的方法比基于 mutex 的方法更加复杂一点。当然在某些情况下还是很有用的。例如你有很多复杂的协 程,而且管理多个 mutex 可能导致错误。当然你可以选择使用任意一种方法,只要你保证这种方法让你觉得很舒服而且也能保证程序的正确性。

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 应用文书 > 工作报告

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁