Golang 线程和协程的区别

如题所述

线程:
多线程是为了解决CPU利用率的问题,线程则是为了减少上下文切换时的开销,进程和线程在Linux中没有本质区别,最大的不同就是进程有自己独立的内存空间,而线程是共享内存空间。
在进程切换时需要转换内存地址空间,而线程切换没有这个动作,所以线程切换比进程切换代价要小得多。
协程:
想要简单,又要性能高,协程就可以达到我们的目的,它是用户视角的一种抽象,操作系统并没有这个概念,主要思想是在用户态实现调度算法,用少量线程完成大量任务的调度。
Goroutine是GO语言实现的协程,其特点是在语言层面就支持,使用起来十分方便,它的核心是MPG调度模型:M即内核线程;P即处理器,用来执行Goroutine,它维护了本地可运行队列;G即Goroutine,代码和数据结构;S及调度器,维护M和P的信息。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2016-10-17
线程和C#的线程没区别,重点在于协程。
协程Coroutine并不是多线程的,只是运转的结果很像多线程而已。
MonoBehavior的每个周期里都会检查一次是否需要执行协程,如果需要,就执行。所以是Unity的主线程调用了协程里的代码,你要是写个死循环的话照样会把主线程卡死,这点和Update挺像的。
所以,它们只是看起来很像,实际没啥共同之处。。。本回答被提问者采纳
第2个回答  2017-08-14
提问者问的是golang的协程和线程的区别。最简单讲线程是操作系统调度的,抢占式的。go的协程是由应用自己调度的,或者说golang调度器调用的。协程(G)是存在于逻辑处理器(或者说P)本地任务队列中,在P与线程绑定后调度运行的。
相似回答