美文网首页
2023-11-16日记golang GMP

2023-11-16日记golang GMP

作者: 护念 | 来源:发表于2023-11-17 17:01 被阅读0次

概览

这些内容本身是昨天看的,但是没有做记录,今日来,也忘了些许;在golang中GMP这部分知识感觉还是比较难懂,但是还是要写下自己的一些只言片语理解。

1. 什么事GMP

  • G 指的goroutine
  • M 指的是系统级线程
  • P 指的是使用核心数,可以通过 runtime.GOMAXPROCS()中的数,默认情况下它的数是机器的核心数,我们可以通过上面的指令手动设置。

2. 什么是goroutine?

首先,我要知道协程-corountine;它是用户级线程;由应用创建管理;它是在用户态下;因此不是普通的线程受操作系统直接管理;

在linux中叫做纤程;在go中实现的我们称之为gorountine,也就是 go + corountine;

3. gorountine有什么特点

  1. 它很轻量,初始大小只有2kb左右;而线程在2M;
  2. 虽然它初始很小,但是它的容量是可以扩展的,最大可以大GB;所以还是要注意gorountine的数量
  3. 它在用户态下创建,因此它的创建销毁由go调度器直接控制,不经过操作系统控制

4. GMP之间的关系

P的个数我们非常容易理解,一个台机器就那么几个核心;

这里主要说明的是G和M的关系;
他们是一种m:n的关系,啥意思?m个gorountine映射到n个线程上;为啥要这样设计;最大的压榨机器性能;提高并发能力;1:1 / n : 1 都有很大的缺点;这种涉及结合了两种的优点,但也最为复杂;

下面尝试阐述下运行流程:

  1. 一个gorountine创建后,先看P的本地队列是否能存放,如果能则存入,如果不能则放入全局P队列
  2. M要执行需要先获取到P,获取到P后,从P的本地队列中领取goroutine来执行;如果本地没有则全局,如果还没有则偷;本地>全局>偷
  3. 如果M执行gorountine队列过程中遇到阻塞,则直接换下一个gorountine;将阻塞的放回本地队列等待下次执行;因此gorountine阻塞不会阻塞M

相关文章

  • Golang GMP

    前言 随着服务器硬件迭代升级,配置也越来越高。为充分利用服务器资源,并发编程也变的越来越重要。在开始之前,需要了解...

  • golang GMP理论

    参考文档:https://www.jianshu.com/p/fa696563c38a

  • [视频版]-Golang深入理解GMP

    HELLO GOPHER! 相信越来越多的Go浪小伙伴,都对Golang的GMP调度器流连忘返,GMP很多书籍都有...

  • Golang调度器和GMP模型

    一、调度器的由来 调度本身是指操作系统中为每个任务分配其所需资源的方法。 在操作系充中,线程是任务执行的最小单位,...

  • golang的线程模型——GMP模型

    常见的线程模型 单线程服务器编程模型:Redis、Node.、JavaScript 多线程服务器编程模型:并发多个...

  • go并发的那些事

    思考:go为什么那么擅长并发? 答:从设计理解上来讲我觉着golang的CSP并发模型与GMP调度器是基石。你看虽...

  • 文件管理分析

    读《欧盟GMP》-3 全球的GMP,与我们息息相关的是中国GMP2010版,欧盟GMP,美国CGMP。 今天看看文...

  • 深入Golang调度器之GMP模型

    Go语言虽然使用一个Go关键字即可实现并发编程,但Goroutine被调度到后端之后,具体的实现比较复杂。先看看调...

  • 深入Golang调度器之GMP模型

    前言 随着服务器硬件迭代升级,配置也越来越高。为充分利用服务器资源,并发编程也变的越来越重要。在开始之前,需要了解...

  • 2023-11-16

    今天的天气很好啊 数学考试我的还不错,我的同桌是80多,后桌是快70,全班最高分是98,我是93分,这回考的数学题...

网友评论

      本文标题:2023-11-16日记golang GMP

      本文链接:https://www.haomeiwen.com/subject/vmhewdtx.html