golang中协程和线程的区别是什么?


本文摘自php中文网,作者青灯夜游,侵删。

golang中协程和线程的区别

一般来说,协程就像轻量级的线程。

线程一般有固定的栈,有一个固定的大小。而goroutines为了避免资源浪费(亦或是资源缺乏),采用动态扩张收缩的策略:初始量为2k,最大可以扩张到1G。

每个线程都有一个id,在线程创建的时候就会被返回,所以我们可以通过线程的id来操纵线程。但是在golang中没有这个概念,因此我们在编码之初就要考虑协程的创建和释放问题。

线程和 goroutine 切换调度开销方面

线程/goroutine 切换开销方面,goroutine 远比线程小

线程:涉及模式切换(从用户态切换到内核态)、16个寄存器、PC、SP...等寄存器的刷新等。

因为协程在用户态由协程调度器完成,不需要陷入内核,这代价就小了。

所以goroutine:只有三个寄存器的值修改 - PC / SP / DX.

相关推荐:golang教程

以上就是golang中协程和线程的区别是什么?的详细内容,更多文章请关注木庄网络博客!!

相关阅读 >>

知乎从python转为go,是不是代表go比python好?

golang 哪些功能用标准库

go - 变量声明

go关于tpl文件无法读取域中数据{{$.name}}

手撸golang 架构设计原则 合成复用原则

golang不适合开发web吗

rabbitmq 死信 延时队列 [go版本]

go get下载包失败问题

你或许听过对golang map做gc?

linux环境golang配置

更多相关阅读请进入《golang》频道 >>




打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...