go 语言基础 进程Process 线程Thread 协程Goroutine

进程,Process

何为进程,简单来讲进程就是我们计算机里启动的程序,每启动一个程序,就启动了一条进程


如图片所示,这个叫活动监视器,后面还有个括号,写着所有进程,所以这些程序就是所谓的进程,如果进程结束,那么所有线程,协程也都会结束

那我们知道了进程 ,那线程又是什么呢

线程 Thread

还是这张图,细心的朋友应该已经看到了,每个程序后面都会有一列是线程,对没错,线程就是每个程序里单出来的一条线,一个线程只能干一件事情,而一个程序里有多个线程,就是可以干多件事情,一个线程占用相对进程要小很多,但是跟我们接下来要介绍的协程,那线程就可以算是重量级了。

协程 Coroutine 

那协程又是怎么理解呢,其实也很好理解,协程就可以理解为轻量级的线程。

go语言中的协程 Goroutine

go语言引以为傲的就是go的协程,我们叫他Goroutine,这也是go语言相对于别的语言的优势所在,以很小的资源代价,来运行多个协程,go语言是一门并发性语言,啥又为并发性呢

Concurrency并发性

同时可以执行多条路径,但是同一时间点上,只能执行1个。讲到并发性那我们就不能不说并行性

arallelism并行性

多条路径同时执行,真正的并行多核支持。

go语言作为一门并发性语言,可以很小的代价启动多条Goroutine,从而来完成需要完成的工作,他不是一个一个顺序完成,而是多个Goroutine一起争抢资源,谁抢到,谁运行,最大化利用有限资源,从而提高工作效率,在go语言中,启动Goroutine也很简单,只要在要执行的函数或方法前面加上go关键字,一条Goroutien就开启了,main函数也是一条Goroutine,main函数是主的Goroutine,只要他一结束,那么整个程序就会结束,所以一般我们会让main函数先等待,等其他子Goroutien结束之后,主函数在结束,而让main函数等待的方法有很多,比如,通道 channel,或者同步等待组 sync包的WaitGroup方法,又或者简单暴力的time包下的sleep方法,接下来我会一一介绍。

       

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章