关于线程和协程
来源:1-4 Go 程序是怎么跑起来的
panccvv
2021-05-16 17:07:43
曹大,怎么通俗易懂理解线程和协程,网上搜一堆说的不明不白
1回答
Xargin
2021-05-16
如果只是想理解的话,g 就是一个计算任务
用户代码里写:
```
go func() {
xxxx
}()
```
的时候,是希望 runtime 把这个 go func 里面的代码执行完。任务在执行的过程中需要一些资源,资源可以分两种:
栈,我的 goroutine 里发生函数调用,需要给被调用的函数分配栈空间(stack frame),这部分分配工作是由 runtime 管理的
堆,在任务执行的过程中,有一些变量需要被分配到堆上,这部分工作也是 runtime 管理的
m 是实际的线程,和其它语言的线程完全一样,他主要的职责不断执行调度循环,这个循环的任务就是从队列中取出用户提交过来的 g,并且执行
概念上这样就可以理解了,实际上很多人还会比较线程和 goroutine 的资源开销以及切换成本,我个人觉得这没啥意义。。不过还是列在 ppt 上了
相似问题