前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Go 十秒钟了解 PMG 模型

Go 十秒钟了解 PMG 模型

作者头像
凌虚
发布2020-07-20 12:25:41
1.7K0
发布2020-07-20 12:25:41
举报

是什么支撑了 Go 的高并发?

对于高并发,现代操作系统早就有了多进程和多线程,然而它们本身也是有缺点的。进程是独占资源的基本单元,操作系统创建、销毁进程是非常消耗资源的。线程存在于进程中,是一个执行序列,我们通常把在内核上切换线程的行为称之为上下文切换,上下文切换的代价仍然是昂贵的。

为了解决上述问题,Go 构建了自己的 PMG 模型:

M:machine ,代表一个内核线程,这个线程是操作系统来处理的,操作系统负责把它放置到一个 core 上去执行。

P:processor ,代表一个逻辑处理器,也就是执行代码的上下文环境。

G:goroutine ,代表一个并发的代码片段。

简而言之,就是 P 在 M 上执行 G 。

操作系统的线程调度发生在内核空间,而 Go 中并发的基本单元 Goroutine 存在于用户空间,其并不是由操作系统调度(Go 有自己的调度器),总之,Goroutine 比线程更加的轻量,其调度也非常高效,这便是 Go 高并发的重要原因。

推荐阅读 Scheduling In Go 系列文章:

https://www.ardanlabs.com/blog/2018/08/scheduling-in-go-part1.html

对应的中文翻译地址:https://juejin.im/post/5cdeb6cdf265da1bd605727f

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-10-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Node Python Go全栈开发 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档