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

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

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

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

同步处理

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

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

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

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

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

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

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

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

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

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

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

标签:
  • 热门焦点
  • 一加Ace2 Pro真机揭晓 钛空灰配色质感拉满

    终于,在经过了几波预热之后,一加Ace2 Pro的外观真机图在网上出现了。还是博主数码闲聊站曝光的,这次的外观设计还是延续了一加11的方案,只是细节上有了调整,例如新加入了钛空灰
  • Raft算法:保障分布式系统共识的稳健之道

    1. 什么是Raft算法?Raft 是英文”Reliable、Replicated、Redundant、And Fault-Tolerant”(“可靠、可复制、可冗余、可容错”)的首字母缩写。Raft算法是一种用于在分布式系统
  • 2023 年的 Node.js 生态系统

    随着技术的不断演进和创新,Node.js 在 2023 年达到了一个新的高度。Node.js 拥有一个庞大的生态系统,可以帮助开发人员更快地实现复杂的应用。本文就来看看 Node.js 最新的生
  • 三万字盘点 Spring 九大核心基础功能

    大家好,我是三友~~今天来跟大家聊一聊Spring的9大核心基础功能。话不多说,先上目录:图片友情提示,本文过长,建议收藏,嘿嘿嘿!一、资源管理资源管理是Spring的一个核心的基础功能,不
  • 使用LLM插件从命令行访问Llama 2

    最近的一个大新闻是Meta AI推出了新的开源授权的大型语言模型Llama 2。这是一项非常重要的进展:Llama 2可免费用于研究和商业用途。(几小时前,swyy发现它已从LLaMA 2更名为Lla
  • Python异步IO编程的进程/线程通信实现

    这篇文章再讲3种方式,同时讲4中进程间通信的方式一、 Python 中线程间通信的实现方式共享变量共享变量是多个线程可以共同访问的变量。在Python中,可以使用threading模块中的L
  • Temu起诉SHEIN,跨境电商战事升级

    来源 | 伯虎财经(bohuFN)作者 | 陈平安日前据外媒报道,拼多多旗下跨境电商平台Temu正对竞争对手SHEIN提起新诉讼,诉状称Shein“利用市场支配力量强迫服装厂商与之签订独家
  • OPPO、vivo、小米等国内厂商Q2在印度智能手机市场份额依旧高达55%

    7月20日消息,据外媒报道,研究机构的报告显示,在全球智能手机出货量同比仍在下滑的大背景下,印度这一有潜力的市场也未能幸免,出货量同比也有下滑,多家厂
  • OPPO K11搭载长寿版100W超级闪充:26分钟充满100%

    据此前官方宣布,OPPO将于7月25日也就是今天下午14:30举办新品发布会,届时全新的OPPO K11将正式与大家见面,将主打旗舰影像,和同档位竞品相比,其最大的卖
Top