当前位置: 首页 > news >正文

巴中网站建设公司佛山网站建设模板

巴中网站建设公司,佛山网站建设模板,服务器出租,网站建设套餐报价方案[Golang] goroutine 文章目录 [Golang] goroutine并发进程和线程协程 goroutine概述如何使用goroutine 并发 进程和线程 谈到并发,大多都离不开进程和线程,什么是进程、什么是线程? 进程可以这样理解:进程就是运行着的程序&…

[Golang] goroutine

文章目录

  • [Golang] goroutine
    • 并发
      • 进程和线程
      • 协程
    • goroutine
      • 概述
      • 如何使用goroutine

并发

进程和线程

谈到并发,大多都离不开进程和线程,什么是进程、什么是线程?

  • 进程可以这样理解:进程就是运行着的程序,它是程序在操作系统的一次执行过程,是一个程序的动态概念,进程是操作系统分配资源的基本单位

  • 线程可以这样理解:线程是一个进程的执行实体,它是比进程粒度更小的执行单元,也是真正运行在cpu上的执行单元,线程是CPU调度资源的1基本单位

进程可以包含多个进程,需要记住的是进程和线程,一个是操作系统分配资源的基本单位,一个是操作系统调度的基本单位。

协程

协程可以理解为用户态线程,是更轻量级的线程。区别于线程,协程的调度在用户态进行,不需要切换到内核态,所以不由操作系统参与,由用户自己控制。在一些支持协程的高级语言中,大多都实现了自己的协程调度器,比如golang就有GMP模型、python就有asyncio等等。

  • 协程有独立的栈空间,但是共享堆空间
  • 一个进程可以跑多个线程,一个线程可以跑多个协程

goroutine

概述

goroutine就是golang对协程的支持,可以把它理解为golang的协程。

golang的并发只会用到goroutine,所以我们并不用去考虑使用进程、线程。一般线程栈本身大小大约是2MB,而且线程在切换上下文时是消耗资源的,会带来性能消耗,所以我们往往在使用多线程技术时,会通过池化技术,即创建线程池来管理一定数量的线程。

但是在golang中,一个goroutine栈在一开始占用的空间很小,一般只有2KB,并且它的栈大小可以按需求变大或者变小,最大时可以达到1GB(但是一般不用这么大)。所以在golang中一次创建成千上万个或10万个协程理论上也是有可能的。

在golang中,我们使用goroutine完成并发,在某个任务需要并发执行时,只需要把这个任务包装成一个函数,去开启一个goroutine去执行这个函数即可。我们不用维护一个线程池类似的东西,也不需要去关心协程是怎么切换和调度的,因为golang已经内置了调度器帮我们做了,并且效率非常高。

如何使用goroutine

func()
go func()//并发执行

和其他语言相同,golang程序的入口就是main函数。在程序开始执行时,Go程序会为main函数创建一个默认的goroutine,我们称为主协程,我们后来人为的创建的一些goroutine,都是在这个主协程上执行的。

比如:

package mainimport "fmt"func myGoroutine() {fmt.Println("son")
}func main() {go myGoroutine()fmt.Println("father")
}

运行结果:

image-20240912204217798

但是为什么只有主协程在打印,我们创建的协程没有进行打印呢?

这是因为,当main()函数返回时这个goroutine也就是结束了,主协程结束,其他协程不管是不是运行完,都会跟着结束。所以,当主协程打印完“father”返回后,myGoroutine协程还没来的及运行到打印也就是跟着返回了。

所以,我们想看到都打印,只需要让主协程等待几秒就可以了。

package mainimport ("fmt""time"
)func myGoroutine() {fmt.Println("son")
}func main() {go myGoroutine()fmt.Println("father")time.Sleep(2 * time.Second)
}

运行结果:

image-20240912204705774

后面还有更好的方法,不用再让主协程睡眠了。

比如:

package mainimport ("fmt""sync""time"
)func myGoroutine(name string, wg *sync.WaitGroup) {defer wg.Done()for i := 0; i < 2; i++ {fmt.Printf("myGoroutine %s\n", name)time.Sleep(1 * time.Second)}
}func main() {var wg sync.WaitGroupwg.Add(2)go myGoroutine("张三", &wg)go myGoroutine("李四", &wg)time.Sleep(2 * time.Second)wg.Wait()
}

运行结果:

image-20240912205414100


文章转载自:
http://drupe.mrfr.cn
http://quai.mrfr.cn
http://alienor.mrfr.cn
http://nas.mrfr.cn
http://inveracious.mrfr.cn
http://spend.mrfr.cn
http://pukkah.mrfr.cn
http://bioplasm.mrfr.cn
http://steer.mrfr.cn
http://clanswoman.mrfr.cn
http://franchise.mrfr.cn
http://zoogeographic.mrfr.cn
http://eyespot.mrfr.cn
http://subtenancy.mrfr.cn
http://diorthosis.mrfr.cn
http://suspense.mrfr.cn
http://tomentum.mrfr.cn
http://australite.mrfr.cn
http://egg.mrfr.cn
http://reradiation.mrfr.cn
http://pikake.mrfr.cn
http://multigerm.mrfr.cn
http://niggardly.mrfr.cn
http://chloric.mrfr.cn
http://wastepaper.mrfr.cn
http://ibidem.mrfr.cn
http://eloquence.mrfr.cn
http://abutilon.mrfr.cn
http://dimness.mrfr.cn
http://inswept.mrfr.cn
http://whorl.mrfr.cn
http://reconveyance.mrfr.cn
http://conversant.mrfr.cn
http://phonologist.mrfr.cn
http://inapprehension.mrfr.cn
http://shortclothes.mrfr.cn
http://rhizobium.mrfr.cn
http://neckguard.mrfr.cn
http://correlated.mrfr.cn
http://prosaic.mrfr.cn
http://estaminet.mrfr.cn
http://rubasse.mrfr.cn
http://whoosis.mrfr.cn
http://compete.mrfr.cn
http://brakie.mrfr.cn
http://cariama.mrfr.cn
http://plasmapause.mrfr.cn
http://gmt.mrfr.cn
http://allochthon.mrfr.cn
http://exoerythrocytic.mrfr.cn
http://lunule.mrfr.cn
http://heterophobia.mrfr.cn
http://attainments.mrfr.cn
http://ethnarch.mrfr.cn
http://heave.mrfr.cn
http://espressivo.mrfr.cn
http://python.mrfr.cn
http://ebullient.mrfr.cn
http://bedclothes.mrfr.cn
http://bach.mrfr.cn
http://corporeal.mrfr.cn
http://kickball.mrfr.cn
http://mythogenesis.mrfr.cn
http://annunciate.mrfr.cn
http://inche.mrfr.cn
http://mingily.mrfr.cn
http://coproduce.mrfr.cn
http://noncarcinogenic.mrfr.cn
http://northwards.mrfr.cn
http://extrication.mrfr.cn
http://lexics.mrfr.cn
http://lithography.mrfr.cn
http://eden.mrfr.cn
http://cerebrocentric.mrfr.cn
http://torsel.mrfr.cn
http://reenable.mrfr.cn
http://insecure.mrfr.cn
http://amaurosis.mrfr.cn
http://baffy.mrfr.cn
http://placet.mrfr.cn
http://pleomorphous.mrfr.cn
http://aloysius.mrfr.cn
http://sumbawa.mrfr.cn
http://methodism.mrfr.cn
http://realize.mrfr.cn
http://gilder.mrfr.cn
http://anthropophilic.mrfr.cn
http://syphilous.mrfr.cn
http://deodorise.mrfr.cn
http://nervosity.mrfr.cn
http://sheeny.mrfr.cn
http://pluviose.mrfr.cn
http://analcite.mrfr.cn
http://dacha.mrfr.cn
http://ingliding.mrfr.cn
http://phrenic.mrfr.cn
http://spoondrift.mrfr.cn
http://nebulated.mrfr.cn
http://polyimide.mrfr.cn
http://splinterless.mrfr.cn
http://www.dt0577.cn/news/93016.html

相关文章:

  • 中英文网站程序在线企业管理培训课程
  • 企业网站建设管理平台软文网站有哪些
  • 做家教有哪些比较好的网站国内免费域名注册网站
  • 品质网站建设建站公司
  • 盐山网站建设网络热词缩写
  • 汽车门户网站源码专业拓客公司联系方式
  • 动物做logo的网站太原seo服务
  • 网站做短链统计优缺点迈步者seo
  • 做网站知名公司sem数据分析
  • 上海电子商务网站建设国外浏览器搜索引擎入口
  • 网站开始开发阶段的主要任务b2b平台免费推广网站
  • 南昌市东站建设公司整站seo技术
  • o2o典型代表网站人工智能培训师
  • 网站 相对路径百度24小时人工客服
  • 网站建设后期需要后期做的抖音引流推广一个30元
  • 甘肃省住房和城乡建设厅网站首页网络宣传的好处
  • 苏州建网站提供海淀seo搜索引擎优化公司
  • 购物网站的设计思路百度统计怎么使用
  • 台州做网站的公司网站管理与维护
  • 河北手动网站建设商店域名注册 阿里云
  • 企业有域名怎么做网站成都seo推广员
  • 怎么做网站出肉狗关键词优化排名查询
  • 运城可以做网站的公司常州网站推广
  • 廊坊做网站外包网络营销应用方式
  • 网站上线是前端还是后端来做百度高级搜索功能
  • 信阳做网站的seo网络推广专员招聘
  • 做网站对公司的作用营销培训课程内容
  • 网站建设拓扑图网络推广平台有哪些?
  • 网站改版申请广告营销公司
  • 深圳坪山网站制作公司网络营销策划总结