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

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

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

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

同步处理

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

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

在下面的示例中,每个URL调用必须完成其整个请求-响应周期并提供响应或错误,以便可以进行后续的URL调用。Krc28资讯网——每日最新资讯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}

输出:Krc28资讯网——每日最新资讯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运行时来实现异步编程。Krc28资讯网——每日最新资讯28at.com

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

在下面的示例中,每个URL调用将通过goroutine在自己的线程中进行,并根据需要处理响应。Krc28资讯网——每日最新资讯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}

输出:Krc28资讯网——每日最新资讯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请求,比较两种方式的性能。Krc28资讯网——每日最新资讯28at.com

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

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

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

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

标签:
  • 热门焦点
  • 三言两语说透设计模式的艺术-单例模式

    写在前面单例模式是一种常用的软件设计模式,它所创建的对象只有一个实例,且该实例易于被外界访问。单例对象由于只有一个实例,所以它可以方便地被系统中的其他对象共享,从而减少
  • 分布式系统中的CAP理论,面试必问,你理解了嘛?

    对于刚刚接触分布式系统的小伙伴们来说,一提起分布式系统,就感觉高大上,深不可测。而且看了很多书和视频还是一脸懵逼。这篇文章主要使用大白话的方式,带你理解一下分布式系统
  • .NET 程序的 GDI 句柄泄露的再反思

    一、背景1. 讲故事上个月我写过一篇 如何洞察 C# 程序的 GDI 句柄泄露 文章,当时用的是 GDIView + WinDbg 把问题搞定,前者用来定位泄露资源,后者用来定位泄露代码,后面有朋友反
  • 2023年,我眼中的字节跳动

    此时此刻(2023年7月),字节跳动从未上市,也从未公布过任何官方的上市计划;但是这并不妨碍它成为中国最受关注的互联网公司之一。从2016-17年的抖音强势崛起,到2018年的“头腾
  • 华为Mate 60系列用上可变灵动岛:正式版体验将会更出色

    这段时间以来,关于华为新旗舰的爆料日渐密集。据此前多方爆料,今年华为将开始恢复一年双旗舰战略,除上半年推出的P60系列外,往年下半年的Mate系列也将
  • 苹果、三星、惠普等暂停向印度出口笔记本和平板电脑

    集微网消息,据彭博社报道,在8月3日印度突然禁止在没有许可证的情况下向印度进口电脑/平板及显示器等产品后,苹果、三星电子和惠普等大公司暂停向印度
  • 2纳米决战2025

    集微网报道 从三强争霸到四雄逐鹿,2nm的厮杀声已然隐约传来。无论是老牌劲旅台积电、三星,还是誓言重回先进制程领先地位的英特尔,甚至初成立不久的新
  • 三星Galaxy Z Fold5官方渲染图曝光:13.4mm折叠厚度依旧感人

    据官方此前宣布,三星将于7月26日在韩国首尔举办Unpacked活动,届时将带来带来包括Galaxy Buds 3、Galaxy Watch 6、Galaxy Tab S9、Galaxy Z Flip 5、
  • “买真退假” 这种“羊毛”不能薅

    □ 法治日报 记者 王春   □ 本报通讯员 胡佳丽  2020年初,还在上大学的小东加入了一个大学生兼职QQ群。群主“七王”在群里介绍一些刷单赚
Top