Golang 线程和协程的区别

发布网友 发布时间:2022-04-22 00:09

我来回答

3个回答

热心网友 时间:2022-04-18 17:04

线程:
多线程是为了解决CPU利用率的问题,线程则是为了减少上下文切换时的开销,进程和线程在Linux中没有本质区别,最大的不同就是进程有自己的内存空间,而线程是共享内存空间。
在进程切换时需要转换内存地址空间,而线程切换没有这个动作,所以线程切换比进程切换代价要小得多。
协程:
想要简单,又要性能高,协程就可以达到我们的目的,它是用户视角的一种抽象,操作系统并没有这个概念,主要思想是在用户态实现调度算法,用少量线程完成大量任务的调度。
Goroutine是GO语言实现的协程,其特点是在语言层面就支持,使用起来十分方便,它的核心是MPG调度模型:M即内核线程;P即处理器,用来执行Goroutine,它维护了本地可运行队列;G即Goroutine,代码和数据结构;S及调度器,维护M和P的信息。

热心网友 时间:2022-04-18 18:22

线程和C#的线程没区别,重点在于协程。
协程Coroutine并不是多线程的,只是运转的结果很像多线程而已。
MonoBehavior的每个周期里都会检查一次是否需要执行协程,如果需要,就执行。所以是Unity的主线程调用了协程里的代码,你要是写个死循环的话照样会把主线程卡死,这点和Update挺像的。
所以,它们只是看起来很像,实际没啥共同之处。。。

热心网友 时间:2022-04-18 19:57

提问者问的是golang的协程和线程的区别。最简单讲线程是操作系统调度的,抢占式的。go的协程是由应用自己调度的,或者说golang调度器调用的。协程(G)是存在于逻辑处理器(或者说P)本地任务队列中,在P与线程绑定后调度运行的。

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com