当前位置:首页 > 科技  > 软件

提升应用性能:Go中的同步与异步处理

来源: 责编: 时间:2023-11-06 08:53:21 321观看
导读在开发过程中,当需要同时处理多个操作时,开发者经常面临同步和异步两种处理方式的选择。同步处理在同步处理方式中,任务按顺序一个接一个地执行。每个任务必须在下一个任务开始之前完成。这意味着如果某个任务需要花费大

在开发过程中,当需要同时处理多个操作时,开发者经常面临同步和异步两种处理方式的选择。VXr28资讯网——每日最新资讯28at.com

同步处理

在同步处理方式中,任务按顺序一个接一个地执行。每个任务必须在下一个任务开始之前完成。这意味着如果某个任务需要花费大量时间来完成,它可能会阻塞后续任务的执行,导致潜在的性能瓶颈。VXr28资讯网——每日最新资讯28at.com

一个简单的现实生活中的例子是两个人在喝啤酒时进行对话。一个人说一些话并提问,另一个人根据情况回应,然后反过来...VXr28资讯网——每日最新资讯28at.com

在下面的示例中,每个URL调用必须完成其整个请求-响应周期并提供响应或错误,以便可以进行后续的URL调用。VXr28资讯网——每日最新资讯28at.com

package mainimport ( "fmt" "net/http")func makeUrlCall(url string) { _, err := http.Get(url) if err != nil {  fmt.Println("Got error in connecting to url: ", url) } fmt.Println("Got the response from our url: ", url)}func main() { fmt.Println("Welcome here !!") fmt.Println() //slice of urls urlSlice := []string{  "https://www.baidu.com",  "https://www.csdn",  "https://www.runoob.com", } for idx, url := range urlSlice {  fmt.Println("Calling url on index: ", idx)  makeUrlCall(url) } fmt.Println() fmt.Println("End of sync processing !!") return}

输出:VXr28资讯网——每日最新资讯28at.com

Welcome here !!Calling url on index:  0Got the response from our url:  https://www.baidu.comCalling url on index:  1Got the response from our url:  https://www.csdnCalling url on index:  2Got the response from our url:  https://www.runoob.comEnd of sync processing !!

异步处理

在异步处理方式中,任务独立并同时执行。这意味着程序在一个任务完成之前不会等待它继续下一个任务。在Golang中,可以使用Goroutines和Go运行时来实现异步编程。VXr28资讯网——每日最新资讯28at.com

一个简单的现实生活中的例子是去汽车修理店。一旦工程师处理完其他任务,他们会处理你的任务。在此期间,你可以做其他重要的事情,直到你的汽车被取走并修好。VXr28资讯网——每日最新资讯28at.com

在下面的示例中,每个URL调用将通过goroutine在自己的线程中进行,并根据需要处理响应。VXr28资讯网——每日最新资讯28at.com

package mainimport ( "fmt" "net/http" "sync")func makeUrlCall(url string) { _, err := http.Get(url) if err != nil {  fmt.Println("Got error in connecting to url: ", url) } fmt.Println("Got the response from our url: ", url)}func main() { fmt.Println("Welcome here !!") fmt.Println() //slice of urls urlSlice := []string{  "https://www.baidu.com",  "https://www.csdn",  "https://www.runoob.com", } var wg sync.WaitGroup for _, u := range urlSlice {  wg.Add(1)  //all the url's to get error/response are called in their own separate thread via goroutines  go func(url string) {   defer wg.Done()   makeUrlCall(url)  }(u) } wg.Wait() fmt.Println() fmt.Println("End of sync processing !!") return}

输出:VXr28资讯网——每日最新资讯28at.com

Welcome here !!Got the response from our url:  https://www.baidu.comGot the response from our url:  https://www.runoob.comGot the response from our url:  https://www.csdnEnd of sync processing !!

如果我们在切片中添加更多的URL并进行更多的HTTP get请求,比较两种方式的性能。VXr28资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-17164-0.html提升应用性能:Go中的同步与异步处理

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: 一年经验,你让我精通微服务开发,过分吗?

下一篇: 聊聊接口重试机制的几种解决方案

标签:
  • 热门焦点
  • 鸿蒙OS 4.0公测机型公布:甚至连nova6都支持

    华为全新的HarmonyOS 4.0操作系统将于今天下午正式登场,官方在发布会之前也已经正式给出了可升级的机型产品,这意味着这些机型会率先支持升级享用。这次的HarmonyOS 4.0支持
  • 7月安卓手机性价比榜:努比亚+红魔两款新机入榜

    7月登场的新机有努比亚Z50S Pro和红魔8S Pro,除了三星之外目前唯二的两款搭载超频版骁龙8Gen2处理器的产品,而且努比亚和红魔也一贯有着不错的性价比,所以在本次的性价比榜单
  • 6月iOS设备好评榜:第一蝉联榜首近一年

    作为安兔兔各种榜单里变化最小的那个,2023年6月的iOS好评榜和上个月相比没有任何排名上的变化,仅仅是部分设备好评率的下降,长年累月的用户评价和逐渐退出市场的老款机器让这
  • 每天一道面试题-CPU伪共享

    前言:了不起:又到了每天一到面试题的时候了!学弟,最近学习的怎么样啊 了不起学弟:最近学习的还不错,每天都在学习,每天都在进步! 了不起:那你最近学习的什么呢? 了不起学弟:最近在学习C
  • 本地生活这块肥肉,拼多多也想吃一口

    出品/壹览商业 作者/李彦编辑/木鱼拼多多也看上本地生活这块蛋糕了。近期,拼多多在App首页“充值中心”入口上线了本机生活界面。壹览商业发现,该界面目前主要
  • 东方甄选单飞:有些鸟注定是关不住的

    文/彭宽鸿编辑/罗卿东方甄选创始人俞敏洪带队的“7天甘肃行”直播活动已在近日顺利收官。成立后一年多时间里,东方甄选要脱离抖音自立门户的传闻不绝于耳,“7
  • 消息称小米汽车开始筛选交付中心:需至少120个车位

    IT之家 7 月 7 日消息,日前,有微博简介为“汽车行业从业者、长三角一体化拥护者”的微博用户 @长三角行健者 发文表示,据经销商集团反馈,小米汽车目前
  • iQOO 11S新品发布会

    iQOO将在7月4日19:00举行新品发布会,推出杭州亚运会电竞赛事官方用机iQOO 11S。
  • 利用职权私自解除被封帐号 Meta开除20多名员工

    11月18日消息,据外媒援引知情人士表示,过去一年时间内,Facebook母公司Meta解雇或处罚了20多名员工以及合同工,指控这些人通过内部系统以不当方式重置用户帐号,其
Top