ITPub博客

首页 > 数据库 > 数据库开发技术 > Go 十秒钟了解 PMG 模型

Go 十秒钟了解 PMG 模型

原创 数据库开发技术 作者:凌虚 时间:2019-10-12 18:30:15 0 删除 编辑


是什么支撑了 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 



原文作者:系统架构师Go;如有侵权,请联系管理员删除。

下一篇: Go 垃圾回收
请登录后发表评论 登录
全部评论

注册时间:2017-03-30

  • 博文量
    154
  • 访问量
    63688