你的位置:a一级特毛大片欧洲-xy19app在线观影-a一级一片看免费 > a一级一片看免费 > >Goroutine 存在的意义是什么?
热点资讯
a一级一片看免费

Goroutine 存在的意义是什么?

发布日期:2021-10-21 15:55    点击次数:197

线程其实分两种:

一种是传统意义的操作系统线程 一种是编程语言实现的用户态线程,也称为协程,在 Go 中就是 goroutine

因此,goroutine 的存在必然是为了换个方式解决操作系统线程的一些弊端 -- 太重 。

太重表现在如下几个方面:

第一:创建和切换太重

操作系统线程的创建和切换都需要进入内核,而进入内核所消耗的性能代价比较高,开销较大;

第二:内存使用太重

一方面,为了尽量避免极端情况下操作系统线程栈的溢出,内核在创建操作系统线程时默认会为其分配一个较大的栈内存(虚拟地址空间,内核并不会一开始就分配这么多的物理内存),然而在绝大多数情况下,系统线程远远用不了这么多内存,这导致了浪费;

另一方面,栈内存空间一旦创建和初始化完成之后其大小就不能再有变化,这决定了在某些特殊场景下系统线程栈还是有溢出的风险。

相对的,用户态的goroutine则轻量得多:

goroutine是用户态线程,其创建和切换都在用户代码中完成而无需进入操作系统内核,所以其开销要远远小于系统线程的创建和切换; goroutine启动时默认栈大小只有2k,这在多数情况下已经够用了,即使不够用,goroutine的栈也会自动扩大,同时,如果栈太大了过于浪费它还能自动收缩,这样既没有栈溢出的风险,也不会造成栈内存空间的大量浪费。

【编辑推荐】

鸿蒙官方战略合作共建——HarmonyOS技术社区 前端开发3年了,竟然不知道什么是 Vue 脚手架?(上) 9 月上榜的、热门的十个前端开源项目 你用过的所有前端编译工具, AST 遍历思路就这一种 前端通用 SEO 技术优化指南 前端开发函数式编程入门
上一篇:《英雄联盟》S11小组赛战报:RNG加赛战胜HLE 第一出线
下一篇:<p>前三季度全国居民人均可支配收入26265元,实际增长9.7%</p>