<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>gmp on 华说记录我的生活</title>
    <link>http://www.huasay.com/tags/gmp/</link>
    <description>Recent content in gmp on 华说记录我的生活</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>zh</language>
    <lastBuildDate>Fri, 04 Nov 2022 23:31:55 +0800</lastBuildDate>
    <atom:link href="http://www.huasay.com/tags/gmp/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>golang面试 - gmp</title>
      <link>http://www.huasay.com/2022/11/04/interview-gmp/</link>
      <pubDate>Fri, 04 Nov 2022 23:31:55 +0800</pubDate>
      <guid>http://www.huasay.com/2022/11/04/interview-gmp/</guid>
      <description>相关文章 https://mp.weixin.qq.com/s/jIWe3nMP6yiuXeBQgmePDg https://tonybai.com/2017/06/23/an-intro-about-goroutine-scheduler/ https://tonybai.com/2020/03/21/illustrated-tales-of-go-runtime-scheduler/ https://draveness.me/golang/docs/part3-runtime/ch06-concurrency/golang-goroutine/ https://www.kancloud.cn/aceld/golang/1958305#GoroutineGMP_164 https://segmentfault.com/a/1190000023869478 https://www.luozhiyun.com/archives/448 https://zboya.github.io/post/go_scheduler/ https://www.bilibili.com/video/BV19r4y1w7Nx?p=2&amp;amp;spm_id_from=pageDriver https://mp.weixin.qq.com/s/XiqVIR3U5ZmRD7xwJZKipA
进程，线程，协程的区别 进程： 进程是程序的一次执行过程，是程序在执行过程中的分配和管理资源的基本单位，每个进程都有自己的地址空间,进程是系统进行资源分配和调度的一个独立单位。 每个进程都有自己的独立内存空间，由于进程比较重量，占据独立的内存，所以上下文进程间的切换开销（栈、寄存器、虚拟内存、文件句柄等）比较大，但相对比较稳定安全。
线程：在同一个进程中的不同线程共享相同的地址空间(虚拟内存，代表切换不需要切换页表)，每个线程有独立的栈区，程序计数器（执行指令的信息），栈指针以及函数运行的寄存器。 初始栈大小8M，ulimit - s可以查看。调度由系统调度。从用户态切换到内核态，上下文切换消耗相对大
协程：用户态线程，不由内核管理，由go的底层调度器控制，协程初始栈大小2K。由用户调度
goroutine初始栈大小，上下文如何切换，存在哪里 协程初始栈大小2K，上下文由g0去调度找到对应可以运行的goroutine，存在gorountine的gobuf中
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 组织下面试的语言 gmp是go为了提高并发能力实现的协程调度模型 g代表我们常说的协程，代码里的体现就是go关键字 m代表操作系统的线程，系统最大值默认为10000 p代表逻辑处理器，默认与cpu的核数想同，当然也可以通过runtime.GOMAXPROCS()来设置p的数量，m一般需要与p关联才能执行g。 调度策略： p会切换到g0栈上，执行调度函数，查找到可执行的goroutine，然后调用gogo函数，切换到goroutine的执行流程上。 1. 每隔61次调度轮回从全局队列找，避免全局队列中的g被饿死。 2. 从p.runnext获取g，从p的本地队列中获取。 3. 调用 findrunnable 找g，找不到的话就将m休眠，等待唤醒。 findrunnable 查找G的过程： 1. 调用 runqget ，尝试从P本地队列中获取G，获取到返回 2. 调用 globrunqget ，尝试从全局队列中获取G，获取到返回 3.</description>
    </item>
  </channel>
</rss>
