2022年10月更文挑战2-golang之goroutines

73 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第2天,点击查看活动详情

golang之goroutines

前文

本文主要内容为golang语言中的goroutines以及channels相关知识。内容为对于相关知识的总结整理,其中可能存在不准确或不严谨之处。

goroutines

首先了解一下goroutines。所谓goroutines其实是一个协程的概念。说起协程,首先要提到一个线程的概念。线程主要是在程序运行时进行的一个并发执行单元,而线程的执行过程中主要会采用并行的方式。实际上可执行的线程其实一般与cpu的核心数量有关,一般为cpu数量的二倍。比如java程序的运行来说,一般线程就设置为cpu数量的二倍,也就是程序运行级线程与系统级线程会保持1:1的比例,自然会带来比较大的内存开销。那么什么是go的协程呢?它是另一种并发运行的执行方案,也就是go程序与系统级线程的比例为m:n,自然会带来更高效的并发能力,同时协程的开销要远远小于线程内存的开销,也就带来更强的兵法能力。

如何进行goroutines的开启

golang程序运行时,带来很方便的协程开启方式,也就是用go关键字直接进行函数的调用,也就会进行新协程的拉起,并在协程中进行实际程序的执行。但需要注意的一点是,当主函数退出或程序被终止时,goroutine会被退出。而除此之外,没有办法终止其他的golang协程,只能通过通知告知协程自行中断执行。

go func() {
   for i := 0; i < 10; i++ {
      mutex.Lock()
      item += 1
      mutex.Unlock()
   }
}()

如上所示为一段代码,也就是在协程中进行了锁相关方式的处理,具体内容此处不详细介绍,主要是go关键字的使用。

后记

  • 千古兴亡多少事?悠悠。不尽长江滚滚流。