GO语言中的进程、线程、协程分别是什么?老男孩GO语言线上课程
老男孩IT教育
行业新闻
2021年10月27日 16:48
本篇文章主要介绍下GO语言中的进程、线程和协程这三个概念,三者相似度很高,但还是有细微的差别,不止GO语言,其他编程语言同样有这三个概念,刚接触GO语言的同学可以认真看下本篇文章,相信一定会对你有帮助。请看下文:
本篇文章主要介绍下GO语言中的进程、线程和协程这三个概念,三者相似度很高,但还是有细微的差别,不止GO语言,其他编程语言同样有这三个概念,刚接触GO语言的同学可以认真看下本篇文章,相信一定会对你有帮助。请看下文:
进程:
在早期的计算机中,用户一次只能提交一个任务,只能独立享用计算机的全部资源,也就是只能干一件事情,不能进行IO读写,一个任务在CPU上所花费的时间非常少,大部分时间都是在等待IO。
为了合理利用CPU资源,把内存划分为多块,不同程序使用各自的空间互不干扰,这里的程序指的就是进程,CPU可以在多个进程之间任意切换,从而让CPU的利用率变高。
为了实现CPU在多个进程之间切换,需要保存进程的上下文,以便下次切换回来可以恢复执行进度,Linux中采用了基于时间片和优先级的完全公平调度算法。
线程:
多线程是为了解决CPU利用率的问题,线程则是为了减少上下文切换时的开销,进程和线程在Linux中没有本质区别,最大的不同就是进程有自己独立的内存空间,而线程是共享内存空间。
在进程切换时需要转换内存地址空间,而线程切换没有这个动作,所以线程切换比进程切换代价要小得多。
协程:
想要简单,又要性能高,协程就可以达到我们的目的,它是用户视角的一种抽象,操作系统并没有这个概念,主要思想是在用户态实现调度算法,用少量线程完成大量任务的调度。
Goroutine是GO语言实现的协程,其特点是在语言层面就支持,使用起来十分方便,它的核心是MPG调度模型:M即内核线程;P即处理器,用来执行Goroutine,它维护了本地可运行队列;G即Goroutine,代码和数据结构;S及调度器,维护M和P的信息。
关于"GO语言中的进程、线程、协程分别是什么?"的话题到这里就结束了,老男孩教育go培训课程内容多次更新迭代,更加注重学员的实践动手能力以及思维的形成,杜绝纸上谈兵,全企业真实案例结合理论授课,让学员更好的过渡到工作岗位。想要了解go语言课程信息,欢迎咨询右下角在线客服。
推荐阅读: